IBM i (AS400/ISeries) - 在 WRKQRY 中添加至今日期字段

问题描述 投票:0回答:4

我有一个 YYYYMMDD 格式的十进制日期字段 (TDDATR)。

我想创建一个 TDDATR + 30 天的字段,但我无法做到。

使用“定义结果字段”我尝试了一些方法;

  1. 只需这样做;

TDDATR + 30 天

但它返回了此错误:未正确使用标签持续时间。

  1. 我尝试使用 DIGITS 和 SUBSTR 命令以 DDMMYYYY 格式创建字段,然后超过 30 天,但遇到了相同的错误。

  2. 与上面相同,但采用 DD/MM/YYYY 格式 - 同样的错误。

  3. 使用 DATE(TDDATR) 但我看到的只是字段中的 +。

  4. 在步骤 2 和 3 中创建的字段上使用 DATE( ) - 仍然得到 +

我已经没有想法了 - 任何帮助将不胜感激。

date format ibm-midrange
4个回答
2
投票

Query/400 缺乏基于 SQL 的界面所具有的许多功能。

我强烈建议您考虑切换到查询管理器 (STRQM),这是一个完全基于 SQL 的产品。您甚至可以使用 RTVQMQRY 命令将 ALWQRYDFN 参数设置为 *YES,将 Query/400 查询转换为查询管理器查询。

IBM 推出的另一个选项是 Web Query。同样,完全基于 SQL,您可以将 Query/400 查询转换为它。

话虽如此,问题是 FLD + 30 DAYS 仅当 FLD 是 DATE 数据类型时才有效。 Query/400 包括一个 DATE() 函数,用于将非日期类型转换为日期。但它非常有限,因为它仅适用于根据作业默认设置格式的字符字段。假设您在美国,它仅适用于字符值“07/01/15”。

您可以在 Query/400 中进行大量操作,最终得到满足 DATE() 要求的结果字段。但更好的解决方案是在表上创建 SQL 视图,并将数字日期转换为视图中的日期数据类型。

您可以在视图中找到演示如何将数字 YYYYMMDD 转换为实际日期数据类型的代码示例。不过,我建议创建一个用户定义函数 (UDF) 来为您进行转换。这将使它更容易在视图中使用并在其他地方重用。

如果您愿意,有一个名为 iDate 的开源包,其中包含与日期数据类型相互转换所需的所有代码。

下载它,安装/编译它,你的 SQL 视图就变成了

select ... idate(TDDATR,'*CCYMD') as TD_DATE
from myfile

0
投票

天数的使用如下

Field       Expression                       
CURDATE_30  days(current(date)) + 30         

问题的解决方案是:给定字段 A dec(8,0)

Field       Expression                       
YYYYMMDD_   date(substr(digits(a),5,2)||'/'||
             substr(digits(a),7,2)||'/'||
             substr(digits(a),3,2))      

NEXT_MONTH  DAYS(YYYYMMDD_) + 30              

请记住检查职位描述中的日期格式。在示例中,格式为 MDY 或 MM/DD/YY。

更多信息在这里


0
投票

根据here的信息,我创建了以下2个字段;

TDDIGI  DIGITS(TDDATR)           

TDDAT1  SUBSTR(TDDIGI,7,2)||'/'||
        SUBSTR(TDDIGI,5,2)||'/'||
        SUBSTR(TDDIGI,3,2)           

从这里我可以创建一个日期字段;

TDDAT2      DATE(TDDAT1)

这使我能够执行必要的计算。

TDDAT1 的格式基于您的职位描述,可以通过以下方式找到:

  • 工作
  • 选项2
  • 向下翻页
  • 日期格式..:X

我的是*DMY,所以TDDAT1就是以此为基础格式化的。


0
投票

IBM Web Query 不再是一个选项,因为它已于 23 年 10 月 10 日停止使用

© www.soinside.com 2019 - 2024. All rights reserved.