获取具有重叠时间间隔的两个日期之间的记录

时间:2017-01-07 16:02:31

标签: mysql sql date datetime

我有以下数据库

CREATE TABLE `table` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`time` bigint(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`messages` varchar(2000) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `table` VALUES (1,1467311473,"Jim", "Jim wants a book"),
                      (2,1467226792,"Tyler", "Tyler wants a book"),
                      (3,1467336672,"Phil", "Phil wants a book");

我需要在2016年6月29日至2016年7月1日期间获取时间间隔18:59:52至01:31:12的记录。 我写了一个查询,但它没有返回所需的输出

SELECT l.*
FROM table l
WHERE ((time >=1467226792) AND (CAST(FROM_UNIXTIME(time/1000) as time) >= '18:59:52') AND (CAST(FROM_UNIXTIME(time/1000) as time) <= '01:31:12') AND (time <=1467336672))

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

根据我的理解,你只对所有大于'2016-06-29 18:59:52'且小于'2016-07-01 01:31:12'的时期感兴趣,其中时间元素​​是不在'01:31:12'和'18:59:52'之间

我认为你可以在没有进一步帮助的情况下将该逻辑转换为sql

啊,好吧,这是一个小提琴 - 省略了所有from_unixtime()的东西,因为它增加了不必要的复杂性来理解问题 - 但是根据你的需要调整这个解决方案实际上只是在列的每个实例之前的情况time具有该功能:

http://rextester.com/OOGWB23993

答案 1 :(得分:0)

如果我做对了

SELECT l.*
FROM `table` l
WHERE  time >=1467226792
       AND time <=1467336672
       AND CAST(FROM_UNIXTIME(time/1000) as time) >= '18:59:52' 
       AND FROM_UNIXTIME(time/1000) <= DATE_ADD(DATE_ADD(DATE_ADD(CAST(FROM_UNIXTIME(time/1000) as date), INTERVAL 25 HOUR), INTERVAL 31 MINUTE), INTERVAL 12 SECOND)