【发布时间】:2021-05-30 05:57:25
【问题描述】:
如果日期在StartDate AND EndDate 之间,我会尝试在页面上显示横幅
SELECT *
FROM TABLE
WHERE GETDATE() BETWEEN StartDate AND EndDate)
如果我使用GETDATE() 也无法获得 ID 为 3 的记录,因为我的时间值始终是 00:00:00.000,所以我的时间值始终是 00:00:00.000数据库列,以便上面的查询将显示所有三个记录
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))
将数据类型更改为仅存储日期部分可以解决问题,但我无法更改数据库
【问题讨论】:
-
CONVERT(varchar, EndDate, 23))现在你肯定知道这是一个坏习惯和懒惰的编码。始终为可变长度数据类型指定适当的长度。 -
@Smor 将日期转换为 varchar 以去除时间部分也很懒
-
@Charlieface 是的,两者兼而有之,但我们并不总是拥有一张设计合理的桌子。
-
@SMor 什么,我不是这么说的。 OP 已经有
date列,为什么要将它们转换为varchar以节省时间,请改用cast(... as date)
标签: sql sql-server date between