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