我有以下数据库
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))
有什么建议吗?
答案 0 :(得分:2)
根据我的理解,你只对所有大于'2016-06-29 18:59:52'且小于'2016-07-01 01:31:12'的时期感兴趣,其中时间元素是不在'01:31:12'和'18:59:52'之间
我认为你可以在没有进一步帮助的情况下将该逻辑转换为sql
啊,好吧,这是一个小提琴 - 省略了所有from_unixtime()的东西,因为它增加了不必要的复杂性来理解问题 - 但是根据你的需要调整这个解决方案实际上只是在列的每个实例之前的情况time
具有该功能:
答案 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)