如何将获取日期转换为yyyymmdd格式?

时间:2018-10-17 14:43:37

标签: sql sql-server date datetime type-conversion

我需要将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

谢谢!

5 个答案:

答案 0 :(得分:2)

根据新发现的要求,可以肯定的是,类似的东西应该可以工作。

Convert(int, DATEADD(Year, -3, GETDATE()), 112) > D.REQUESDATE

答案 1 :(得分:0)

DATEADD(Year, -3, GETDATE()) > D.REQUESTDATE

除非REQUESTDATE不是datedatetime,否则您无需转换日期格式即可进行比较。

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