我有一个 YYYYMMDD 格式的十进制日期字段 (TDDATR)。
我想创建一个 TDDATR + 30 天的字段,但我无法做到。
使用“定义结果字段”我尝试了一些方法;
TDDATR + 30 天
但它返回了此错误:未正确使用标签持续时间。
我尝试使用 DIGITS 和 SUBSTR 命令以 DDMMYYYY 格式创建字段,然后超过 30 天,但遇到了相同的错误。
与上面相同,但采用 DD/MM/YYYY 格式 - 同样的错误。
使用 DATE(TDDATR) 但我看到的只是字段中的 +。
在步骤 2 和 3 中创建的字段上使用 DATE( ) - 仍然得到 +
我已经没有想法了 - 任何帮助将不胜感激。
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
天数的使用如下
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。
根据here的信息,我创建了以下2个字段;
TDDIGI DIGITS(TDDATR)
TDDAT1 SUBSTR(TDDIGI,7,2)||'/'||
SUBSTR(TDDIGI,5,2)||'/'||
SUBSTR(TDDIGI,3,2)
从这里我可以创建一个日期字段;
TDDAT2 DATE(TDDAT1)
这使我能够执行必要的计算。
TDDAT1 的格式基于您的职位描述,可以通过以下方式找到:
我的是*DMY,所以TDDAT1就是以此为基础格式化的。
IBM Web Query 不再是一个选项,因为它已于 23 年 10 月 10 日停止使用