【问题标题】:Query between date range, INCLUSIVE日期范围之间的查询,包含
【发布时间】:2014-08-11 16:43:27
【问题描述】:

我有一个名为 CREATED 的 TIMESTAMP 列。我试图让两个时间戳之间的所有行都包含在内。这有效(独家):

select id, created 
  from employees 
 where created < '08/11/2014 00:00:01' 
   and created > '08/08/2014 00:00:01' 
 order by created desc;

但事实并非如此:

select id, created 
  from employees 
 where created <= '08/11/2014 00:00:01' 
   and created => '08/08/2014 00:00:01'
 order by created desc;

在这种情况下,为什么 MySQL 不能识别 == 符号?

【问题讨论】:

    标签: php mysql datetime timestamp


    【解决方案1】:

    您要查找的运算符是 &gt;=&lt;= 。我相信您使用的是=&lt;

    要将 TIMESTAMP 或 DATETIME 表示为字符串,您必须使用 YYYY-MM-DD。您正在使用MM/DD/YYYY。这将无法正常工作。

    请注意,如果您想选择在特定日期范围内出现的 TIMESTAMP 值,最好的方法是使用这种查询。这将从 10 年 8 月 8 日,9 日的任何时间获取带有时间戳的项目。

    select id, created 
      from employees 
     where created >= '2014-08-08'
       and created <  '2014-08-10' + INTERVAL 1 DAY 
     order by created desc;
    

    范围的末尾 (created &lt; '2014-08-10' + INTERVAL 1 DAY) 会占用所有内容,直到不包括您想要的范围的最后一天的午夜。

    你所拥有的东西会在午夜后一秒开始。如果您的某些记录没有任何时间,这可能会搞砸您,只需约会即可。如果您有一条记录,例如,日期为 2014-08-08 且未指定任何时间,您的 00:01 查询将不会提取它。

    【讨论】:

      【解决方案2】:

      您必须使用以下语法:>= 或

      【讨论】:

        【解决方案3】:

        =&gt; 是非法运算符。如果您尝试使用它,您将收到语法错误。使用 &gt;=&lt;= 表示大于或等于和小于或等于。

        另外,日期的正确格式是使用- 作为年、月和日之间的分隔符,而不是/

        BETWEEN 关键字是包容性的:

        select id, created 
          from employees 
         where created BETWEEN '2014-08-08 00:00:01' AND '2014-08-11 00:00:01'
         order by created desc;
        

        当使用BETWEEN时,一定要把较低的值放在前面。

        【讨论】:

          【解决方案4】:

          还有另一种解决方法:源字段上的 CAST()。

          select id, created 
            from employees 
           where CAST(created as DATE) <= '08/11/2014' 
             and CAST(created as DATE) >= '08/08/2014' 
           order by created desc;
          

          更好:

          select id, created 
            from employees 
           where CAST(created as DATE) BETWEEN '08/11/2014'
             and '08/08/2014' 
           order by created desc;
          

          这会将时间排除在比较之外,并且可以很好地满足您的目的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-13
            • 1970-01-01
            • 2014-12-06
            • 1970-01-01
            • 1970-01-01
            • 2021-11-15
            • 1970-01-01
            相关资源
            最近更新 更多