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

DB2关于日期选择的问题,基本上需要从当前日期开始的前12个月,db2,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 (CU

好的,以下
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)  
在哪里
(日期((数字(LNYYP2)| |’—’| | |数字(LNMMP2)| |’—’| | |数字(LNDDP2))>
((当前日期-天(当前时间戳)天))-13个月)
和数字(SHFP02.LNYYP2)| |'-| |数字(LNMMP2)
年(当前时间戳)| |'-| |月(当前时间戳)

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

原稿:

我不确定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)
潜在问题:

对于第二个条件

(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)))

这不是tsql,不管您的标签是什么。也许吧?帮助别人,帮助你。“无效”日期的示例是什么?是否发生错误?如果是这样的话,POST IT.可能是一个SSIS expressionuse datediff函数,<13如前所述,我通常不支持此应用程序,我认为最有可能是MSSQL,但谁知道呢。目前无法访问软件以复制错误,但来自最终用户请求“执行SQL期间出错。错误:日期、时间或时间戳字符串中的java.SQL SQL异常[SQL0181]值无效”。如果我可以访问,可以将这一行缩小到实际行。
数字似乎只存在于DB2中。我正在更改标签和标题。如果这是T-SQL,答案是正确的,但原始海报给出的代码显示它是DB2….…但是有一个
DATE(…)
函数调用,所以OP正在比较两个日期?所列的例外情况可能首先是抱怨日期的转换。