我有以下查询,
SELECT * FROM LOGS
WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18')
此查询不返回任何结果,但以下查询返回结果,
SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17')
为什么第一个查询没有返回任何结果?如果我犯了任何错误,请纠正我。
我有以下查询,
SELECT * FROM LOGS
WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18')
此查询不返回任何结果,但以下查询返回结果,
SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17')
为什么第一个查询没有返回任何结果?如果我犯了任何错误,请纠正我。
您有与您的日期相关的时间吗?BETWEEN 包含在内,但是当您将 2013-10-18 转换为日期时,它将变为 2013-10-18 00:00:000.00。在 18 日的第一秒之后记录的任何内容都不会使用 BETWEEN 显示,除非您包含时间值。
尝试:
SELECT
*
FROM LOGS
WHERE CHECK_IN BETWEEN
CONVERT(datetime,'2013-10-17')
AND CONVERT(datetime,'2013-10-18 23:59:59:998')
如果您想搜索 18 日的一整天。我将毫秒设置为 998,因为 SQL Server 在查询中拉入 2013-10-19 00:00:00:0000。
SQL DATETIME 字段有毫秒。所以我在字段中添加了 999。
第二个查询是从 17 日返回任何结果,还是仅从 18 日返回?
第一个查询将只返回 17 日或 18 日午夜的结果。
试试这个
select *
from LOGS
where check_in >= CONVERT(datetime,'2013-10-17')
and check_in< CONVERT(datetime,'2013-10-19')
从 Sql Server 2008 你有“日期”格式。
所以你可以使用
SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'
https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql
您的任何一个查询都没有任何错误。我的猜测如下:
您需要将日期字段转换为 varchar 以去除时间,然后将其转换回日期时间,这会将时间重置为“00:00:00.000”。
SELECT *
FROM [TableName]
WHERE
(
convert(datetime,convert(varchar,GETDATE(),1))
between
convert(datetime,convert(varchar,[StartDate],1))
and
convert(datetime,convert(varchar,[EndDate],1))
)