【问题标题】:How to get only date part while using dateadd() and getdate()如何在使用 dateadd() 和 getdate() 时仅获取日期部分
【发布时间】:2014-02-26 01:06:42
【问题描述】:

我想显示从当前日期起最近 4 个月的记录。

我不想考虑时间

如何从以下查询中获取日期部分?

where OrderDate >= DATEADD(month, -4, GETDATE()) 

【问题讨论】:

标签: sql sql-server tsql date


【解决方案1】:

如果您使用的是 SQL Server 2008,请尝试将 GETDATE() 直接转换为 DATE

WHERE OrderDate >= DATEADD(month, -4, CONVERT(date, GETDATE())) 

http://sqlfiddle.com/#!3/df444/2

【讨论】:

  • 我可以同意你的第一个,但是你为什么要执行到 varchar 的转换,指定一种可以被模糊解释的格式,然后让系统执行隐式转换回datetime,这样的模糊性可能会产生不正确的结果或错误?
  • @Damien_The_Unbeliever - 公平的假设。我已经删除了后者。
  • 仍将日期时间作为输出...2013-10-25 15:52:31.000
【解决方案2】:

为什么不使用简单的 DATEDIFF 函数

where DATEDIFF(MM, OrderDate, GETDATE()) < 4

【讨论】:

  • 对列使用函数(即OrderDate)使SQL Server 无法使用现有索引。
【解决方案3】:

如果您不能使用DATE 类型,则有旧方法:将DATETIME 值转换为CHAR,修剪小时组件,然后将其转换回@987654324 @,因此小时分量将归零:

SELECT CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112)
-- -----------------------
-- 2014-02-25 00:00:00.000

重要的是在标量参数(而不是列上的)上使用函数以允许使用现有索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2014-06-02
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多