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 and

如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件

sql 语句问题,关于BETWEEN AND 和DATE 的

sql server 日期范围查询

在sql server 2008中如何查询本日、本周和本月数据