2016-06-10 66 views
1

我的表我的SQL时间范围选择

starttime | endtime | id 

10:30   11:30  1 
11:30   12:30  2 
14:30   16:30  3 
15:30   16:30  4 

我需要找到ID为例如 给定的时间段说

10:30 to 13:30 should give me o/p 1 2  
11:30 to 16:30 should give o/p 2 3 4 

声明我使用

select id from table where STR_TO_DATE(starttime,'%h:%i')>='10:30' and STR_TO_DATE(endtime,'%h:%i')<='22:30'; 

它给我只有1和2

我无法得到正确的输出我在这里做错了什么?在VARCHAR 注意开始和结束时间

编辑 -

如果我想selectthe 10:30之间的ID,以12:30我用下面这个命令

select id from table where STR_TO_DATE(starttime,'%H:%i')>='10:30' and STR_TO_DATE(endtime,'%H:%i')<='12:30'; 

这给了我唯一的ID 1 ..但不给我2,如果我改变12:30到12:40它给我1 & 2.Bt我使用的是少一点还是相等,所以它应该给我这两个ID的权利?为什么它不这样工作?

+0

只是好奇,什么'o/p'代表什么? –

回答

1

STR_TO_DATE(开始时间, '%H:%I')

您正在使用其中根据documentation格式%H为:

小时(01 .. 12)

基本上,12以上的东西都是无效的(返回NULL)。 而且,你给了那些ID超过12的值。

使用说明符

%H

在格式00小时 - 23

或指定者

%K

小时0 - 23.