要查询as400中今天的最后7天,因为它以char类型存储日期,如何从今天检索结果,因为我尝试使用
where chardate >= char(days(curdate()) + 7)
但它仍无效
答案 0 :(得分:4)
答案分为两部分。第一个涉及DB2的这种特殊风格的日期数学。相当于curdate()) + 7
的DB2表达式为current date + 7 days
。
第二个涉及将日期值转换为字符值(反之亦然),以便我们对它们进行比较。在真正破解日期之前,我们需要知道chardate
格式存储日期。我们假设它是YYYY-MM-DD
格式。然后,您可以使用char(current date + 7 days, iso)
以相同的格式将来七天。
所以,根据这个假设,你的where语句将是
where chardate >= char(current date + 7 days, iso)
date
可以转换为以下几种标准日期格式:
YYYY-MM-DD
MM/DD/YYYY
DD.MM.YYYY
YYYY-MM-DD
如果您的chardate
格式不同,则需要与substr
进行一些相当繁琐的工作。例如,要将YYYY-MM-DD
转换为YYYYMMDD
,您需要类似
substr(char(current date, iso), 1, 4) ||
substr(char(current date, iso), 5, 2) ||
substr(char(current date, iso), 7, 2)
此方法的主要问题是无法可靠地比较未以“年月日”顺序存储的格式。也就是说,12311969
(即MMDDYYYY
)的比较大于01012011
,因为就数据库而言,您需要比较两个八位数字。 (这就是为什么你几乎总是应该在实际date
字段或YYYYMMDD
或类似的正确排序格式中存储日期。)
我使用名为idate的免费实用程序取得了巨大成功,该实用程序提供SQL用户定义函数(UDF)来转换存储在char&中的日期。数字字段到日期。请注意,此解决方案需要RPG编译器的可用性。
答案 1 :(得分:2)
从今天起的最后7天:
where
date(substr(chardate,1,4) || '-' ||
substr(chardate,5,2) || '-' ||
substr(chardate,7,2)) between current date - 7 days and current date
执行字符范围比较:
where
chardate between
substr(char(current date - 7 days, iso),1,4) ||
substr(char(curernt date - 7 days, iso),6,2) ||
substr(char(current date - 7 days, iso),9,2)
and
substr(char(current date, iso),1,4) ||
substr(char(current date, iso),6,2) ||
substr(char(current date, iso),9,2)