在 T-SQL 中检查两个日期之间的日期。

10

我有一个存储过程,想要检查一个日期是否在一个固定日期和当前日期/时间(使用GETDATE())之间:

SELECT
    a, b
FROM myTbl
WHERE
    DATE BETWEEN 'Day start datetime' AND GETDATE()

例如:

WHERE
    DATE BETWEEN '2013-09-10 00:00:00.00' AND 'GETDATE()'

如何做呢?
4个回答

19

使用一对 DATEADD/DATEDIFF 调用可以将日期向下舍入至前一天的午夜:

SELECT a , b
FROM myTbl
WHERE DATE BETWEEN DATEADD(day,DATEDIFF(day,0,GETDATE()),0) and GETDATE()

或者,如果您使用的是SQL Server 2008或更高版本:

SELECT a , b
FROM myTbl
WHERE DATE BETWEEN CONVERT(date,GETDATE()) and GETDATE()

8

GETDATE()是T-SQL函数,而'GETDATE()'则是字符串文字。

您的查询应该像这样:

SELECT a , b
FROM myTbl
WHERE DATE BETWEEN '2013-09-10 00:00:00.0' and GETDATE()

1
我认为 WHERE DATE BETWEEN '2013-09-10 00:00:00.00' and GETDATE()(不需要在GETDATE()调用周围加单引号)应该完全可以工作。

'2013-09-10 00:00:00.00' 这只是一个例子,明天它将不能正确工作,我需要当前日期的开始时间。 - GeoVIP
好的,我没有从问题中得到那个。正确答案由@Damien_The_Unbeliever给出。 - Onkel Toob

0

您可以通过将Getdate()返回值转换为日期类型,然后再次转换为Datetime来获取日期开始时间,如下所示。

select a,b
from myTbl
where [date] between convert(datetime,convert([date], getdate())) 
                 and getdate()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接