我有以下查询:
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号的结果吗?还是只返回了18号的结果?
第一条查询语句仅返回17号或18日午夜之前的结果。
请尝试使用以下查询语句。
select *
from LOGS
where check_in >= CONVERT(datetime,'2013-10-17')
and check_in< CONVERT(datetime,'2013-10-19')
SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'
https://learn.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql
你的两个查询都没有错误。
我猜想可能是以下原因之一:
DROP TABLE IF EXISTS #TB_PERIODO_TEMP CREATE TABLE #TB_PERIODO_TEMP (DATA DATETIME)
INSERT INTO #TB_PERIODO_TEMP VALUES
('22-12-2022 00:00:00'),
('22-12-2022 23:59:59'),
('23-12-2022 00:00:00'),
('23-12-2022 23:59:59')
SELECT * FROM #TB_PERIODO_TEMP -- ALL
SELECT * FROM #TB_PERIODO_TEMP WHERE DATA
BETWEEN '22-12-2022' AND '23-12-2022' --OLÉ!!!
--BETWEEN CONSIDERING PERIODS WITH HOURS O/
SELECT * FROM #TB_PERIODO_TEMP WHERE DATA
BETWEEN '22-12-2022' AND '23-12-2022 23:59:59:999'
您需要将日期字段转换为varchar类型以去除时间,然后再将其转换回datetime类型,这将重置时间为“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))
)