如果日期在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