#sql #time #comparison-operators
#sql #время #сравнение-операторы
Вопрос:
Есть ли какой-нибудь простой способ сравнить два значения времени с использованием SQL?
Например, я хочу сравнить так:-
07:45 >= 04:45
Комментарии:
1. я полагаю, они хранятся в столбце varchar?
2. какую СУБД вы используете?
3. этот вопрос недостаточно точен. Вы хотите сравнить значения времени…. но к какому типу данных они относятся? Если они являются «временем», то ответ очевиден. Если они являются varchar, тогда возникает вопрос, были ли они проверены на формат и значение? Если это так, то сравнение строк в порядке, и вы экономите циклы, преобразующие правильную строку во время. Если они являются переменными и непроверенными, вам нужно потанцевать, чтобы преобразовать и протестировать, прежде чем сравнивать значения. ЭТО ПРОСТО ПЛОХОЙ ВОПРОС
Ответ №1:
Вам необходимо привести строковые значения к времени, прежде чем выполнять сравнение, как показано ниже:
Select * from table where CAST(StartTime As Time) >= CAST(EndTime As Time)
Ответ №2:
В sql server есть тип данных времени, который вы можете использовать напрямую.
SELECT CONVERT(TIME,'04:45' ':00')
Комментарии:
1. есть ли у вас тип данных datetime в Toad?
2. Простым решением для этого может быть добавление даты к вашему времени путем ее объединения. например, скажем, сегодняшнюю дату. ‘2014-06-19’ для обоих значений времени, которые вы хотите сравнить. что-то вроде приведения(‘2014-06-19′ ’04:45’ ‘:00’ как дата и время )
Ответ №3:
Поскольку вы не указываете конкретную СУБД, давайте оставим ее общей. Преобразуйте значения времени в строки, как вы показываете их в своем вопросе (24hh:mm [.ss]). Это может сделать любая СУБД, хотя конкретные методы будут отличаться. Затем просто сравните их. Принудительно введенное в поле с двумя символами, заполненное нулем, лексическое сравнение даст тот же результат, что и арифметическое сравнение. То есть,
Time( '07:45' ) >= Time( '04:45'24 )
эквивалентно
'07:45' >= '04:45'
Это: true
потому что символ ASCII ‘7’ лексически больше, чем символ ASCII ‘4’.