日期数学与curdate

时间:2013-02-07 21:50:13

标签: sql ibm-midrange

我需要在今天的7天内执行lpdt7之内的选择。 下面的代码返回:“日期,时间或时间戳字符串中的值无效。”

SELECT lnmast.sname,
       lnmast.status,
       ddmast.acctno,
       ddmast.status,
       date(digits(lpdt7)) AS closed
FROM mydat.lnmast lnmast
LEFT OUTER JOIN mydat.ddmast ddmast ON lnmast.cifno = ddmast.cifno
AND lnmast.altadd = ddmast.altadd
WHERE lnmast.status = 2
  AND date(digits(lpdt7)) >= curdate() -7 days

2 个答案:

答案 0 :(得分:0)

我认为日期函数不适用于十进制日期(数字(lpdt7))并导致您看到的错误。 假设您的小数日期为YYYYMMDD格式。你可以像这样转换它。

 DATE (SUBSTR ( DIGITS (lpdt7) , 1 , 4 ) || '-' || 
       SUBSTR ( DIGITS (lpdt7) , 5 , 2 ) || '-' || 
       SUBSTR ( DIGITS (lpdt7) , 7 , 2 ) )

我使用的是DIGITS而不是CHAR,因为它不会抑制0。 最好在你的系统中创建日期转换功能 - sql代码看起来会更清晰。这个答案取自我们现场系统中使用的部分日期功能。

答案 1 :(得分:0)

我的错误家伙。我必须首先在日期字段中捕获空值。

WHERE lnmast.status = 2 and lpdt7 > 1 and date(digits(lpdt7)) >= curdate() - 7 days