Для сравнения двух значений времени, которые имеют форму HH: MM, ИСПОЛЬЗУЯ SQL

#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’.