【问题标题】:MYSQL query between two timestamps两个时间戳之间的MYSQL查询
【发布时间】:2014-01-28 17:15:16
【问题描述】:

我的数据库表中有以下条目

eventName(varchar 100) -> myEvent
date(timestamp) -> 2013-03-26 09:00:00

我正在尝试使用以下查询;

SELECT * 
FROM eventList 
WHERE `date` BETWEEN UNIX_TIMESTAMP(1364256001) AND UNIX_TIMESTAMP(1364342399)

即在 2013-03-26 00:00:01 和 2013-03-26 23:59:59 之间

但它给了我 0 个结果。

我尝试过扩展日期范围,但没有成功,但在该范围内肯定有结果。

感谢任何帮助。

【问题讨论】:

    标签: mysql unix-timestamp


    【解决方案1】:

    试试这个对我有用

    SELECT * from bookedroom
        WHERE UNIX_TIMESTAMP('2020-8-07 5:31')
            between UNIX_TIMESTAMP('2020-8-07 5:30') and
            UNIX_TIMESTAMP('2020-8-09 5:30')
    

    【讨论】:

      【解决方案2】:

      试试这个。它对我有用。

      SELECT * FROM eventList
      WHERE DATE(date) 
        BETWEEN 
          '2013-03-26' 
        AND 
          '2013-03-27'
      

      【讨论】:

        【解决方案3】:

        试试:

        SELECT * 
        FROM eventList 
        WHERE  `date` BETWEEN FROM_UNIXTIME(1364256001) AND FROM_UNIXTIME(1364342399)
        

        或者

        SELECT * 
        FROM eventList WHERE  `date` 
        BETWEEN '2013-03-26 00:00:01' AND '2013-03-26 23:59:59'
        

        【讨论】:

        • 如果我创建$today_start = DateToTimestamp( date('Y-m-d h:i:s A', strtotime('today midnight')), $timezone ); $today_end = DateToTimestamp( date('Y-m-d h:i:s A', strtotime('-1 seconds ' ,strtotime('tomorrow midnight'))), $timezone ); 并使用这个BETWEEN FROM_UNIXTIME($today_start) AND FROM_UNIXTIME($today_end) 它不会返回它应该返回的内容,因此我必须直接使用变量。这个确实适用于一个日期(以可读的形式,虽然像 2013-03-26 00:00:01)但不是时间戳,就像我的情况一样但不是一般的。
        • 为什么不直接提供时间戳?
        【解决方案4】:

        您只需要将日期转换为UNIX_TIMESTAMP。您可以这样编写查询:

        SELECT *
        FROM eventList
        WHERE
          date BETWEEN
              UNIX_TIMESTAMP('2013/03/26')
              AND
              UNIX_TIMESTAMP('2013/03/27 23:59:59');
        

        当您不指定时间时,MySQL 将假定00:00:00 作为给定日期的时间。

        【讨论】:

          【解决方案5】:

          @Amaynut 谢谢

          SELECT * 
          FROM eventList 
          WHERE date BETWEEN UNIX_TIMESTAMP('2017-08-01') AND UNIX_TIMESTAMP('2017/08/01');
          

          如上所述,代码有效,我的问题解决了。

          【讨论】:

            【解决方案6】:
            SELECT * FROM `orders` WHERE `order_date_time`  BETWEEN 1534809600 AND 1536718364
            

            【讨论】:

            • 为什么有人会在查询中写入时间戳值?请参阅有关如何使用格式化日期的其他答案。
            • 我不知道为什么这个有效,但如果我有时间戳并且我想使用UNIX_TIMESTAMP(mytimestamp)FROM_UNIXTIME(mytimestamp) 在我的情况下,这两个都不起作用并且使用 php 变量 /直接时间戳有效!
            【解决方案7】:

            试试下面的代码。在我的情况下工作。希望这会有所帮助!

                select id,total_Hour,
                (coalesce(weekday_1,0)+coalesce(weekday_2,0)+coalesce(weekday_3,0)) as weekday_Listing_Hrs,
                (coalesce(weekend_1,0)+coalesce(weekend_2,0)+coalesce(weekend_3,0)) as weekend_Listing_Hrs
                from
                select *,
                listing_duration_Hour-(coalesce(weekday_1,0)+coalesce(weekday_2,0)+coalesce(weekday_3,0)+coalesce(weekend_1,0)+coalesce(weekend_2,0)) as weekend_3 
                from 
                (
                select * , 
                case when date(Start_Date) = date(End_Date) and weekday(Start_Date) in (0,1,2,3,4) 
                     then timestampdiff(hour,Start_Date,End_Date)
                     when date(Start_Date) != date(End_Date) and weekday(Start_Date) in (0,1,2,3,4) 
                     then 24-timestampdiff(hour,date(Start_Date),Start_Date)
                     end as weekday_1,  
                case when date(Start_Date) != date(End_Date) and weekday(End_Date) in (0,1,2,3,4) 
                     then timestampdiff(hour,date(End_Date),End_Date)
                     end as weekday_2,
                case when date(Start_Date) != date(End_Date) then    
                (5*(DATEDIFF(date(End_Date),adddate(date(Start_Date),+1)) DIV 7) + 
                MID('0123455501234445012333450122234501101234000123450',7 * WEEKDAY(adddate(date(Start_Date),+1))
                + WEEKDAY(date(End_Date)) + 1, 1))* 24 end as  weekday_3,
                case when date(Start_Date) = date(End_Date) and weekday(Start_Date) in (5,6) 
                     then timestampdiff(hour,Start_Date,End_Date)
                     when date(Start_Date) != date(End_Date) and weekday(Start_Date) in (5,6) 
                     then 24-timestampdiff(hour,date(Start_Date),Start_Date)
                     end as weekend_1,  
                case when date(Start_Date) != date(End_Date) and weekday(End_Date) in (5,6) 
                     then timestampdiff(hour,date(End_Date),End_Date)
                     end as weekend_2
                from 
                TABLE_1
                )
            

            【讨论】:

            • 这不是问题的答案。请修改您的答案并提供解释。
            【解决方案8】:

            尝试以下方法:

            SELECT * FROM eventList WHERE
            date BETWEEN 
            STR_TO_DATE('2013/03/26', '%Y/%m/%d')
            AND
            STR_TO_DATE('2013/03/27', '%y/%m/%d')
            

            【讨论】:

              猜你喜欢
              • 2020-04-17
              • 1970-01-01
              • 2023-02-14
              • 1970-01-01
              • 2011-11-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多