带有日期选择的DB2问题,基本上需要从当前日期开始的前12个月

时间:2018-01-22 23:21:54

标签: db2

好的以下where条款有效,但1月份计算结果无效时除外:

WHERE
(DATE((DIGITS(LNYYP2) || '-' || DIGITS(LNMMP2) || '-' || DIGITS(LNDDP2))) > 
((CURRENT DATE - DAY (CURRENT TIMESTAMP) DAYS)) - 13 MONTH) 
AND DIGITS(SHFP02.LNYYP2) || '-' || DIGITS(LNMMP2) <> 
YEAR (CURRENT TIMESTAMP) || '-' || MONTH (CURRENT TIMESTAMP)  

2 个答案:

答案 0 :(得分:0)

抱歉,看起来您使用的是与我想象的不同的数据库。这是如何在SQL Server中解决此问题的答案。

Original Anser:

我不确定where where子句到底发生了什么,但是你可以在12个月之前找到DATEADD。如果您需要获得本月的第一天,可以使用DATEFROMPARTS构建它。

declare @today date;
declare @past date;

set @today = SYSDATETIME();
set @past =  dateadd(month, -12, @today)

select @today, @past, DATEFROMPARTS(YEAR(@past), MONTH(@PAST), 1)

答案 1 :(得分:0)

潜在问题:

对于第二个条件,

(DATE((DIGITS(LNYYP2) || '-' || DIGITS(LNMMP2) || '-' || DIGITS(LNDDP2))) > 
((CURRENT DATE - DAY (CURRENT TIMESTAMP) DAYS)) - 13 MONTH) 

您要比较两个字符串而不是两个日期或两组数字。我不确定您的问题是因为您没有提供任何给出正确或错误答案的样本数据,但也许可以更好地写为:

and (lnyyp2, lnmmp2) not in (values(int(year(current date)), int(month(current date)))
相关问题