KUMPREK Ответов: 1

Как я могу запросить тип данных time с 2-кратным изменением в течение полуночи


Как я могу запросить тип данных time с интервалом между 2 разами, изменяющимся в течение полуночи.
Вот что я попробовал.

declare @timeValue time
SET @timeValue = '23:30:00'

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue)
WHERE @timeValue BETWEEN DATEADD(minute, -30, @timeValue) AND DATEADD(minute, +30, @timeValue)


Но если мы возьмем приведенный выше пример для определения того, действительно ли время находится между 30 минутами до и после, и оно меняется в течение полуночи. Я не получаю ожидаемого результата.

Ожидаемым результатом будет строка со значением в переменной timeValue вместе с 30 минутами до и после других столбцов.

Что я уже пробовал:

Если я использую время, которое не пересекает полночь, как то, что ниже, оно работает правильно.
declare @timeValue time
SET @timeValue = '23:00:00'

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue)
WHERE @timeValue BETWEEN DATEADD(minute, -30, @timeValue) AND DATEADD(minute, +30, @timeValue)


И я получаю следующий ответ, как и ожидалось.

---------------- ---------------- ----------------
23:00:00.0000000 22:30:00.0000000 23:30:00.0000000

Patrice T

Вместо того чтобы показывать пример, который работает, вы должны показать пример, который не работает.

KUMPREK

Первый фрагмент кода показывает неработающий код.

[no name]

О чем ты спрашиваешь?
Отправьте запрос, который вы пытаетесь выполнить, и ожидаемый результат.

1 Ответов

Рейтинг:
10

KUMPREK

Время заканчивается в полночь. Другими словами: 23:30 + 00:30 = 00:00 а это меньше 23: 30. Условие 23: 00 < 23: 30 < 00:00 не выполняется. Обходной путь заключается в преобразовании аргументов в datetime:

declare @timeValue time
SET @timeValue = '23:30:00'

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue)
WHERE CONVERT(datetime,@timeValue) BETWEEN DATEADD(minute, -30, CONVERT(datetime,@timeValue)) AND DATEADD(minute, +30, CONVERT(datetime,@timeValue))