SQL Server: GETDATE with Between函数没有返回所需的数据



如果日期在StartDate AND EndDate之间,我试图在页面上显示横幅

SELECT * 
FROM TABLE 
WHERE GETDATE() BETWEEN StartDate AND EndDate)

如果我使用GETDATE()也比较datetime let,则无法获得ID为3的记录,因为我的时间值始终是00:00:00.000,是否有一种方法我只能使用GETDATE来比较数据库列的yyy-mm-dd部分,以便上述查询将显示所有三个记录

ID  StartDate                  EndDate
-------------------------------------------------------
1  2020-12-31 00:00:00.000    2021-03-15 00:00:00.000
2  2020-12-31 00:00:00.000    2021-03-31 00:00:00.000
3  2021-01-01 00:00:00.000    2021-02-28 00:00:00.000

我也使用下面的查询,但它显示相同的结果集。

SELECT * 
FROM TABLE 
WHERE (GETDATE() BETWEEN StartDate AND CONVERT(varchar, EndDate, 23))

更改数据类型以仅存储日期部分可以解决问题,但我不能更改数据库

如果您想忽略时间,请在GETDATE():

上这样做
WHERE CONVERT(DATE, GETDATE()) BETWEEN StartDate AND EndDate

或者添加一天到EndDate并使用:

WHERE GETDATE() >= StartDate AND
GETDATE() < DATEADD(DAY, 1, EndDate)

要保持查询sarge-able(能够使用索引),将GETDATE转换为您想要的方式,而不是转换列。

WHERE
GETDATE() >= StartDate AND
CAST(CAST(GETDATE() AS date) AS datetime) <= EndDate
SELECT * 
FROM TABLE 
WHERE CAST(GETDATE() AS DATE) BETWEEN StartDate AND EndDate

最新更新