Sql 带curdate的日期数学

Sql 带curdate的日期数学,sql,ibm-midrange,Sql,Ibm Midrange,我需要在今天起7天内选择我的lpdt7所在位置。 下面的代码返回:“日期、时间或时间戳字符串中的值无效。” 我认为date函数不能处理类似于十进制的日期(数字(lpdt7))并导致您看到的错误。 假设十进制日期为YYYYMMDD格式。你可以这样转换它 DATE (SUBSTR ( DIGITS (lpdt7) , 1 , 4 ) || '-' || SUBSTR ( DIGITS (lpdt7) , 5 , 2 ) || '-' || SUBSTR ( DIGI

我需要在今天起7天内选择我的
lpdt7
所在位置。 下面的代码返回:“日期、时间或时间戳字符串中的值无效。”


我认为date函数不能处理类似于十进制的日期(数字(lpdt7))并导致您看到的错误。 假设十进制日期为YYYYMMDD格式。你可以这样转换它

 DATE (SUBSTR ( DIGITS (lpdt7) , 1 , 4 ) || '-' || 
       SUBSTR ( DIGITS (lpdt7) , 5 , 2 ) || '-' || 
       SUBSTR ( DIGITS (lpdt7) , 7 , 2 ) )
我使用的是数字而不是字符,因为它不抑制0。
最好在您的系统中创建日期转换函数-sql代码看起来更干净。这个答案取自我们实时系统中使用的部分日期函数。

我的错误伙计们。我必须首先在date字段中捕获空值

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

在对这个问题进行更深入的调查之前,您是否查看了
lpdt7
中的日期格式?十进制(7,0),好的。但是数据是什么样子的呢?日期是如何表示的?例如,它是mmddyy,yymdd,cymmdd吗?最好的解决方案可能包括创建自定义项,但我们需要首先正确理解您的数据,以便为您提供正确的代码。感谢分享,现在您可以检查您的答案是否正确:)
WHERE lnmast.status = 2 and lpdt7 > 1 and date(digits(lpdt7)) >= curdate() - 7 days