SQL 服务器:使用 Between 函数的 GETDATE 没有 return 所需的数据

SQL Server : GETDATE with Between function doesnt return the desired data

如果日期介于 StartDate AND EndDate

之间,我将尝试在页面上显示横幅
SELECT * 
FROM TABLE 
WHERE GETDATE() BETWEEN StartDate AND EndDate)

如果我使用 GETDATE(),这将无法获得 ID 3 的记录,它还比较 datetime let 因为我的时间值始终是 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)

要保持​​查询可扩展(能够使用索引),请将 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