Datetime BETWEEN 语句在 SQL Server 中不起作用
Posted
技术标签:
【中文标题】Datetime BETWEEN 语句在 SQL Server 中不起作用【英文标题】:Datetime BETWEEN statement not working in SQL Server 【发布时间】:2013-10-18 14:09: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')
为什么第一个查询没有返回任何结果?如果我做错了,请纠正我。
【问题讨论】:
您能否发布从 LOGS where CHECK_IN >= convert(datetime, '2013-10-17') 中选择前 5 个 CHECK_IN 的结果? 【参考方案1】:您有与您的日期相关的时间吗? 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。
【讨论】:
我试过这种方法,但它一直在指责语法错误,即使这个确切的查询告诉它有语法错误。可以使用复制:es.rakko.tools/tools/36 rakko.tools 看起来像一个 mysql 站点 - 我会检查 MySQL 问题。 ***.com/questions/3822648/… 看起来很轻,它可能有助于所需的语法。【参考方案2】:第二个查询是从 17 日返回任何结果,还是仅从 18 日返回?
第一个查询将只返回 17 日或 18 日午夜的结果。
试试这个
select *
from LOGS
where check_in >= CONVERT(datetime,'2013-10-17')
and check_in< CONVERT(datetime,'2013-10-19')
【讨论】:
【参考方案3】:从 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
【讨论】:
【参考方案4】:您的任何一个查询都没有任何错误。 我的猜测如下:
在 2013-10-17' 和 '2013-10-18' 之间不存在记录 第二个查询返回的记录存在于“2013-10-18”之后【讨论】:
【参考方案5】:您需要将日期字段转换为 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))
)
【讨论】:
以上是关于Datetime BETWEEN 语句在 SQL Server 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL 中,BETWEEN 语句是不是必须采用 BETWEEN 最低和最高形式?
如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件