MySQL从一段时间中选择

时间:2018-06-15 11:16:58

标签: mysql sql date

我想构建一个每天下午1点更新的查询,该查询显示从下午3点到11点的静态数据。

如果现在是2018-06-16 12pm ,则显示 2018-06-15 3pm - 2018-06-16 11am

的数据

如果现在是2018-06-16下午1点,则显示 2018-06-16 3pm - 2018-06-17 11am

的数据

这是我试过的查询。

更新:

SELECT * FROM config WHERE gt BETWEEN CONCAT(curdate(),' 15:00:00') AND CONCAT(curdate()+ INTERVAL 1 DAY,' 10:59:59')

的问题:

今天是2018-06-15,curdate() - > 2018-06-15,显示今天没有问题的数据。

今天是2018-06-16,curdate() - > 2018-06-16,显示第二天太早的数据,我想要的是每天下午1点更新。

3 个答案:

答案 0 :(得分:0)

您可以使用此示例构建查询:

SELECT * 
FROM table_name
WHERE `date` >= NOW() - INTERVAL 10 DAY;

Here有关如何使用INTERVAL的一些信息。

here是如何在特定时间执行查询的一些有用信息。

编辑:

  

如果now()= 2018-06-16下午1点,则显示2018-06-16 3pm - 2018-06-17的数据   上午11时

然后你可以使用这个例子:

SELECT * 
FROM config 
WHERE DATE(gt) BETWEEN DATE(NOW() + INTERVAL 2 DAY_HOUR) AND -- 2018-06-16 3pm
                       DATE(NOW() + INTERVAL 22 DAY_HOUR);   -- 2018-06-17 11am

DEMO here

注意:第一个DATE应该早于DATE语句中的第二个BETWEEN。否则它就不会起作用。

答案 1 :(得分:0)

您可以通过多种方式应用select命令。在这里我只提到了两种方法。这对你很有用。

SELECT * FROM config 
WHERE gt BETWEEN #07/04/1996# AND #07/09/1996#;


select * from config  where gt  and created_at > (now()- interval 10 day)

答案 2 :(得分:0)

两种情况:

  1. 在0:00到12:59之间:你想要昨天15:00到今天11:00
  2. 时间是13:00到23:59:你今天要15:00到明天11:00
  3. 查询:

    select * 
    from config 
    where
    (
      hour(current_time) between 0 and 12 
      and gt >= current_date - interval 9 hours -- yesterday 15:00
      and gt < current_date + interval 11 hours -- today 11:00
    )
    or
    (
      hour(current_time) between 13 and 23
      and gt >= current_date + interval 15 hours -- today 15:00
      and gt < current_date + interval 35 hours -- tomorrow 11:00
    );