Нужно лучшее условие if между двумя временными интервалами в SQL?

#sql

#sql

Вопрос:

Я пытаюсь использовать приведенное ниже условие if в SLQ, чтобы возвращать определенное значение каждый день с 07:25 вечера до 8:35 утра, но это условие иногда не выполняется и не дает ожидаемого результата. при наблюдении заметил несколько случаев, когда время сервера находится между 00:00: 00 часов 00:24:00 часов. Может кто-нибудь помочь с любым альтернативным вариантом? Я использую это условие в табличной функции

 If (CONVERT(VARCHAR(20),GETDATE(),108)>'19:25:00') and (CONVERT(VARCHAR(20),GETDATE(),108)<'8:35:00')
Begin
Return @string

End
 

Комментарии:

1. Какую СУБД вы используете? (Этот код очень специфичен для продукта.)

2. Сравнение значений времени в виде строк кажется потенциально проблематичным. 9:30:00 сравнивает как большее, чем 20:00:00 , из-за первого символа. Как правило, предпочитают соответствующие типы данных.

3. «это условие иногда не выполняется и не дает ожидаемого результата» — когда и с каким неправильным результатом? В любом случае, вы обрабатываете временные метки как строки, что очень неправильно, потому что вы получите буквальную сортировку по символам, а не ту, которая знает, какое время раньше / позже, чем в другие времена. Поэтому вы должны сравнивать их как раз.

4. В этом случае будет ли работать приведенная ниже опция Declare @date time=getdate() If (@date>’22:15:00′ или @date<’09:00:00′) Begin Return End

5. Вероятно, нет, потому что сравнение значения даты / времени со строкой. Кроме того, getDate(), вероятно, возвращает компонент даты, а не время. Любое сравнение значений даты / времени должно иметь дело с компонентом даты, а также со временем. Для сравнения строк включите нулевой заполнитель: 09:30:00 будет сортироваться до 20:00:00.