【问题标题】:How can I convert get date to format of yyyymmdd?如何将获取日期转换为 yyyymmdd 格式?
【发布时间】:2019-03-22 07:03:34
【问题描述】:

我需要将getdate() 转换为yyyymmdd 格式。最终我需要回到 3 年并忽略超过 3 年的订单。

我不确定我将GETDATE() 转换为yyyymmdd 是否正确。

这就是我所做的DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112 ) > D.REQUESDATE

D.REQUESDATE 存储为十进制。我应该先将其转换为字符串还是整数。

运行此查询的路径应该是什么?

错误是

“将表达式转换为数据类型日期时间时出现算术溢出错误。”

SELECT  
    MYCOLUMNS
      ,D.[EXPDATE]
     FROM MYTABLE
       JOIN TABLES

DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112) > D.REQUESDATE

提前致谢!

【问题讨论】:

  • 你有一个语法错误所以把你缺少的)添加到你的dateadd函数AND DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112 )) > D.REQUESDATE
  • D.REQUESDATE是否存储为yyyymmdd格式的字符串?
  • D.REQUESDATE 它是什么日期数据类型\???
  • 在我修复了括号后出现“将表达式转换为数据类型日期时间的算术溢出错误”错误。 D.REQUESDATE 的数据类型是十进制。
  • 为什么将日期存储为小数?您将不得不执行一些令人讨厌的转换。您能否分享一些示例数据,以便我们了解我们正在处理的内容?

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


【解决方案1】:

考虑到新发现的要求,这样的东西应该可以工作。

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

【讨论】:

  • 你成就了我的一天!!谢谢@seanLange
  • 它适合我
【解决方案2】:

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

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

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

【讨论】:

  • 我认为转换的目的是剥夺getdate()的时间
  • 那么你将使用DATEADD(Year, -3, CONVERT(date, GETDATE()))。他正在将其转换为 varchar。
  • 我知道有很多方法可以剥夺时间,只是让您意识到,以便您可以将其包含在您的答案中
【解决方案3】:

您需要将 DATEADD() 放在 CONVERT() 中,而不是相反。否则 DATEADD() 会将数据类型隐式转换回datetime

您问题中语法错误的原因是您缺少右括号。

【讨论】:

    【解决方案4】:

    您现有的查询可以工作。您只是因为缺少右括号而收到错误,请尝试...

    AND DATEADD(YYYY,-3,CONVERT(VARCHAR(8),GETDATE(),112 )) > D.REQUESDATE
    

    【讨论】:

      【解决方案5】:

      这将起作用:

        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
      

      【讨论】:

      • 这可能在某些 DBMS(可能是 oracle??)中有效,但这显然是用 sql server 标记的。而在 sql server 中 add_months 函数不存在并且 sysdate 不是你获取当前日期时间值的方式。
      • @SeanLange 其标记的 sql
      • 嗯,没有。在您发布答案时,已经添加了 sql server 标签。我要说的是,如果他们使用的是 oracle,这可能是正确的答案,但是由于他们使用的是 sql server,所以它对他们不起作用。
      • 我正在使用 SSMS。这不起作用,因为数据类型不同@nikhilsugandh
      猜你喜欢
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      相关资源
      最近更新 更多