【问题标题】:Datetime BETWEEN statement not working in SQL ServerDatetime BETWEEN 语句在 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 的结果?

标签: sql-server sql-server-2008 between


【解决方案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 问题。 stackoverflow.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))
            )
        

        【讨论】:

          猜你喜欢
          • 2011-10-08
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 2017-12-04
          • 2013-01-23
          • 2021-12-29
          • 1970-01-01
          • 2012-02-17
          相关资源
          最近更新 更多