2011-06-25 38 views
1

我有一个时间字符串为8:00 AM,9:00 AM等存储在MySQL表中。我想检查时间范围,如果时间早上11:00至下午6:00之间11:00 AM?如何在mysql中找到它。如何查找时间范围在MySQL给定一个表“墙壁时间”

时间存储如下

day   depart_time  return_time 
Monday  9:00am   5:00pm 
Wednesday 9:30am   4:30pm 
Tuesday  9:00am   3:00pm 
+3

你有情况下,当出发时间比返回时间更大?例如。出发时间是晚上11点,回程时间是凌晨1点(第二天)?这使它很有趣。 –

+0

@Salman一个有趣的问题。我希望看到一个回复​​假设这是*不是*的情况下,因为它可以稍后扩大:) – 2011-06-25 06:45:38

+0

@Chauhan我在模特哭:) – 2011-06-25 06:45:48

回答

1
SELECT depart_time, return_time FROM SCHEDULE 
WHERE CASE 
WHEN STR_TO_DATE(depart_time, '%l:%i%p') < STR_TO_DATE(return_time, '%l:%i%p') THEN 
    STR_TO_DATE(depart_time, '%l:%i%p') <= @check_time AND @check_time < STR_TO_DATE(return_time, '%l:%i%p') 
ELSE 
    NOT(STR_TO_DATE(return_time, '%l:%i%p') <= @check_time AND @check_time < STR_TO_DATE(depart_time, '%l:%i%p')) 
END 

用你想检查的时间替换@check_time。这个查询将跨越两天的时间。

的样本数据:

depart_time return_time 
9:00am  5:00pm 
11:00pm  1:00am 

输出示例:

#SET @check_time = STR_TO_DATE('8:59am', '%l:%i%p'); 
(no result) 

#SET @check_time = STR_TO_DATE('9:00am', '%l:%i%p'); 
9:00am  5:00pm 

#SET @check_time = STR_TO_DATE('11:00am', '%l:%i%p'); 
9:00am  5:00pm 

#SET @check_time = STR_TO_DATE('4:59pm', '%l:%i%p'); 
9:00am  5:00pm 

#SET @check_time = STR_TO_DATE('5:00pm', '%l:%i%p'); 
(no result) 

#SET @check_time = STR_TO_DATE('10:59pm', '%l:%i%p'); 
(no result) 

#SET @check_time = STR_TO_DATE('11:00pm', '%l:%i%p'); 
11:00pm  1:00am 

#SET @check_time = STR_TO_DATE('12:00am', '%l:%i%p'); 
11:00pm  1:00am 

#SET @check_time = STR_TO_DATE('12:59am', '%l:%i%p'); 
11:00pm  1:00am 

#SET @check_time = STR_TO_DATE('1:00am', '%l:%i%p'); 
(no result) 
0

试试这个。

选择TIMEDIFF( '2006-10-31十一时50分31秒', '2006-10-31 11点50分01秒')

你需要给24小时格式,

SELECT SUBTIME('01:00:00.999999','02:00:00.999998');

+0

感谢您的快速回复,但时间存储为字符串。请检查我更新的问题。 –

3

您可以使用STR_TO_DATE将字符串数据类型转换为时间。在下面的示例中,返回“上午11:00”在出发时间和返回时间之间的所有行。

SELECT `depart_time`, 
     `return_time` 
FROM `table` 
WHERE STR_TO_DATE('11:00am', '%l:%i%p') BETWEEN STR_TO_DATE(`depart_time`, '%l:%i%p') AND STR_TO_DATE(`return_time`, '%l:%i%p') 

STR_TO_DATE函数根据指定的格式解析字符串。在这种情况下,它是:

  • %升:时间(1-12)
  • %I:该分钟(00-59)
  • %P:AM/PM
相关问题