2012-06-16 2 views
0

Как в чеке, если расписание существует между заданным интервалом времени в SQL более четко underatandКак сравнить время для расписания поддавки между время от - времени

Select * 
From [Client].[scheduler] 
Where [Scheduler_Date] = '6/16/2012' 
    and ([start]<='13:06 ') 
    and ([end]>='14:31 ') 
+0

Итак, что случилось с вашим запросом? – praveen

+0

Я не думаю, что вы можете применять '> =' или '<=' оператор для строковых значений, помещенных внутри кавычек, таких как ''11: 00'' – yogi

+0

Вы можете использовать оператор <> со строковыми значениями, например WHERE CONVERT (VARCHAR , timeColumn, 108)> = '01: 01: 01 ', но лучший способ - между оператором – praveen

ответ

0

Попробуйте

select * 
from [Client].[scheduler] 
where [Scheduler_Date] = '6/16/2012' and 
     (CONVERT(VARCHAR(5),[time_from],108) LIKE '11%') and 
     (CONVERT(VARCHAR(5),[time_to],108) LIKE '13:06%') 
1

Я предложил бы избежать строк и используя time тип данных:

select * from [Client].[scheduler] 
where [Scheduler_Date] = '20120616' and 
     (CONVERT(time,[time_from])>='11:00') and 
     (CONVERT(time,[time_to])<='13:06') 

(Почему time_from и time_to не уже time s?)

Я также скорректировал строку даты буквального использовать безопасный формат (YYyyMmDd)


С другой стороны, мне кажется, что вам может потребоваться найти любые графики, которые перекрываются (частично или полностью) с заданными конечными точками. Хитрость есть для переключения сравнения:

where [Scheduler_Date] = '20120616' and 
     (CONVERT(time,[time_from])<='13:06') and 
     (CONVERT(time,[time_to])>='11:00') 

Эта новая статья WHERE будет найти все строки, которые перекрывают 11: период времени 06, а не только тех, кто целиком содержится в нем: 00-13.

Смежные вопросы