Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取两个时间间隔重叠的日期之间的记录_Mysql_Sql_Date_Datetime - Fatal编程技术网

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

Mysql 获取两个时间间隔重叠的日期之间的记录,mysql,sql,date,datetime,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

我有以下数据库

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))
选择l*
来自表l
其中((time>=1467226792)和(CAST(FROM UNIXTIME(time/1000)as time)>='18:59:52')和(CAST(FROM UNIXTIME(time/1000)as time),如果我没弄错的话

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) 
选择l*
从'table'l开始
其中时间>=1467226792
时间='18:59:52'
如果我没弄错的话,我会从\u UNIXTIME(time/1000)开始

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) 
选择l*
从'table'l开始
其中时间>=1467226792
时间='18:59:52'

据我所知,从_UNIXTIME(time/1000)来看,您只对大于'2016-06-29 18:59:52'和小于'2016-07-01 01:31:12'的所有时段感兴趣,其中时间元素不在'01:31:12'和'18:59:52'之间

我认为您可以将该逻辑转换为sql,而无需进一步的帮助

啊,好吧,这里有一个小把戏-省略了所有的from_unixtime()内容,因为这会给理解问题增加不必要的复杂性-但是根据您的需要调整此解决方案实际上只是在列
time
的每个实例前面加上该函数:


据我所知,您只对大于“2016-06-29 18:59:52”且小于“2016-07-01 01:31:12”的所有时段感兴趣,其中时间元素不在“01:31:12”和“18:59:52”之间

我认为您可以将该逻辑转换为sql,而无需进一步的帮助

啊,好吧,这里有一个小把戏-省略了所有的from_unixtime()内容,因为这会给理解问题增加不必要的复杂性-但是根据您的需要调整此解决方案实际上只是在列
time
的每个实例前面加上该函数:


将时间戳转换为日期时间。我真的很困惑。什么是
'emd\u date'
'start\u date'
?为什么有字符串常量?表中有哪些列?示例数据和所需结果会有所帮助。@GordonLinoff如果start\u date=21:30:00和end\u date是03:30:00存储日期,则查询无效imes作为一个单一的entity@Strawberry日期和时间存储为单个实体,但要获取给定时间间隔之间的记录,需要将时间戳转换为日期时间。我真的很困惑。什么是
'emd_date'
'start_date'
?为什么有字符串常量?表中有哪些列?Sa示例数据和所需结果会有所帮助。@GordonLinoff如果start\u date=21:30:00,end\u date为03:30:00,则查询不起作用。将日期和时间存储为单个entity@Strawberry日期和时间存储为单个实体,但要在给定的时间间隔内获取记录,需要将其分隔为casting/“time/1000”材料肯定是不必要的。此外,这个解决方案(如果正确)使问题过于复杂。铸造/时间/1000材料肯定是不必要的。此外,这个解决方案(如果正确)使问题过于复杂这将给出“2016-06-29 18:59:52”和“2016-07-01 01:31:12”之间的所有结果,即2016-06-30时间大于01:31:12和小于18:59:52的结果,这是不需要的。所有日期的时间间隔为18:59:52到01:31:12,并且排除所有其他不在两者之间的时间间隔在这些时间段内,这将给出“2016-06-29 18:59:52”和“2016-07-01 01:31:12”之间的所有结果,即2016-06-30中大于01:31:12和小于18:59:52的时间段的结果,这是不需要的。所有日期的时间间隔为18:59:52到01:31:12,不包括这些时间段之间的所有其他时间段