我需要将getdate()
转换为yyyymmdd
格式。最终,我需要回溯3年,而忽略3年以上的订单。
我不确定我是否正确地将GETDATE()
转换为yyyymmdd
。
这就是我所做的DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112 ) > D.REQUESDATE
D.REQUESDATE存储为十进制。我应该先将其转换为String还是Integer。
运行该查询的路径应该是什么?
错误是
“将表达式转换为数据类型为datetime的算术溢出错误。”
SELECT
MYCOLUMNS
,D.[EXPDATE]
FROM MYTABLE
JOIN TABLES
DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112)> D.REQUESDATE
谢谢!
答案 0 :(得分:2)
根据新发现的要求,可以肯定的是,类似的东西应该可以工作。
Convert(int, DATEADD(Year, -3, GETDATE()), 112) > D.REQUESDATE
答案 1 :(得分:0)
DATEADD(Year, -3, GETDATE()) > D.REQUESTDATE
除非REQUESTDATE
不是date
或datetime
,否则您无需转换日期格式即可进行比较。
DATEADD(Year, -3, GETDATE()) > CAST(D.REQUESTDATE AS datetime)
答案 2 :(得分:0)
您需要将DATEADD()放在CONVERT()内,而不要反过来。否则,DATEADD()会将数据类型隐式转换回datetime
。
您的问题中出现语法错误的原因是您缺少右括号。
答案 3 :(得分:0)
这将起作用:
and add_months(sysdate,-36)>D.REQUESDATE
等效的SQL Server:
DATEADD(year, -3, getdate())>D.REQUESDATE
DATEADD(yy, -3, getdate())>D.REQUESDATE
DATEADD(yyyy, -3, getdate())>D.REQUESDATE
答案 4 :(得分:0)
您现有的查询可以使用。您仅收到错误是因为缺少右括号,请尝试...
AND DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112 )) > D.REQUESDATE