我试图根据应该在今天的日期之内的日期筛选出值。我使用以下查询,但查询未按预期工作。
这就是我在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”之间过滤日期。
请指导。
答案 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'