as400日期查询

时间:2011-05-21 07:37:09

标签: information-retrieval ibm-midrange

要查询as400中今天的最后7天,因为它以char类型存储日期,如何从今天检索结果,因为我尝试使用

        where chardate >= char(days(curdate()) + 7)

但它仍无效

2 个答案:

答案 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可以转换为以下几种标准日期格式:

  • ISO:YYYY-MM-DD
  • 美国:MM/DD/YYYY
  • EUR:DD.MM.YYYY
  • JIS: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)