在SQL Server中显示当前日期的日期值

时间:2015-03-18 05:40:28

标签: sql-server date datetime

我试图根据应该在今天的日期之内的日期筛选出值。我使用以下查询,但查询未按预期工作。

这就是我在SQL Server中使用的。

select values 
from table 
where date between DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 
           and GETDATE()

如果我在2015年3月18日执行查询,我希望在“2015-03-18 00:00:00”和“2015-03-18 23:59:59”之间过滤日期。

请指导。

2 个答案:

答案 0 :(得分:1)

使用>=<比使用BETWEEN要好得多:

SELECT *
FROM Table
WHERE
    date >= CAST(CAST(GETDATE() AS DATE) AS DATETIME)
    AND date < DATEADD(DAY, 1, CAST(CAST(GETDATE() AS DATE) AS DATETIME))

CAST(CAST(GETDATE() AS DATE) AS DATETIME)会为您提供当前日期,而不包含2015-03-18 00:00:00

的时间部分

DATEADD(DAY, 1, CAST(CAST(GETDATE() AS DATE) AS DATETIME))会在第二天找到你,再没有时间的一部分。

反过来,您的WHERE条件将是:

WHERE
    date >= '2015-03-18 00:00:00'
    AND date < '2015-03-19 00:00:00'

或者,你可以使用它:

SELECT *
FROM Table
WHERE
    date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)        -- beginning of this day 
    AND date < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, 0) -- beginning of next day  

有关更多日期的计算,请参阅此article.

答案 1 :(得分:1)

  

因为您期待'2015-03-18 00:00:00'和之间的价值   '2015-03-18 23:59:59所以,你只需要比较日期部分。

你可以使用Cast()/ Convert():

SELECT *
FROM Table
WHERE
    cast(date as date) =cast(getdate() as date)

包括2015-03-18 00:00:00'和'2015-03-18 23:59:59'