ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Сравнение времени в SQL Server: как игнорировать дату

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы произвести сравнение времени в SQL Server, используйте тип данных TIME в условии WHERE следующим образом:

SQL
Скопировать код
SELECT * FROM YourTable
WHERE CAST(YourDateTimeColumn AS TIME) > '18:00:00';

Такой запрос извлечёт записи из таблицы YourTable, время в которых превышает 18 часов. С помощью оператора CAST достигается необходимая для сравнения временных значений точность.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Правила игры: Понимание datetime

Не забывайте, что в SQL Server значения datetime хранятся, как числа с плавающей точкой. Целая часть числа представляет собой дату, а дробная – время. Можно провести аналогию со стандартным 24-часовым форматом, где до двоеточия указаны часы, а после – минуты.

Три мушкетера времени: floor, cast и convert

Для сравнения лишь временных составляющих удобно преобразовать datetime в число с плавающей точкой, затем снова обратно в datetime, применив функции FLOOR и CAST. Функция FLOOR помогает качественно отделить время от даты.

SQL
Скопировать код
SELECT *, CAST(YourDateTimeColumn – CAST(FLOOR(CAST(YourDateTimeColumn AS FLOAT)) AS DATETIME) AS TIME) AS TimeOnly
FROM YourTable

Таким образом, вы получите колонку 'TimeOnly' для сравнения времени.

Приветствуем временной диапазон

Используйте BETWEEN для выборки по временному диапазону. Время укажите в формате 'ЧЧ:ММ:СС'. Например, между '09:00:00' и '17:00:00'. Таким образом вы получите записи, совершенные в промежутке с 9 утра до 5 вечера.

Оформим вашего рыцаря времени: Стиль 108

С целью стандартизации вывода времени применяйте функцию CONVERT в сочетании со стилем 108, чтобы получить время в формате ЧЧ:ММ:СС.

SQL
Скопировать код
SELECT CONVERT(VARCHAR, YourDateTimeColumn, 108) AS TimePortion

Жонглируем временными переменными

Упростите сложность ваших запросов, используя переменные для хранения времени при сравнении различных столбцов.

SQL
Скопировать код
DECLARE @StartTime TIME = '08:00:00'; -- Начало дня
DECLARE @EndTime TIME = '12:00:00'; -- Время обеда

SELECT CASE 
         WHEN CAST(EventStart AS TIME) >= @StartTime AND CAST(EventEnd AS TIME) <= @EndTime 
         THEN 'Событие в установленное время'
         ELSE 'Событие вне временного промежутка'
       END as Status
FROM Events;

Визуализация

Можно представить процесс сравнения времени в SQL Server, как определение победителя в забеге между двумя бегунами:

Markdown
Скопировать код
Бегун A (🏃‍♀️): Предполагаемое время финиша: 14:00
Бегун B (🏃‍♂️): Предполагаемое время финиша: 14:15

Установим, кто пересечет финишную черту первым:

SQL
Скопировать код
SELECT CASE 
         WHEN RunnerA.FinishTime < RunnerB.FinishTime 
         THEN 'Бегун A опередил 🏁' 
         ELSE 'Бегун B выиграл или ничья! 🏁' 
       END as Result

Таким образом мы сравниваем время, словно используя стоп-часы:

Markdown
Скопировать код
ЕСЛИ 14:00 < 14:15, ТО ⏱️: "Бегун A быстрее!"
ИНАЧЕ ⏱️: "Бегун B обогнал A или они пришли одновременно!"

Как обращаться с полуночными звонами

Для работы со специальными случаями, особенно в преддверии полуночи, требуется особое внимание.

SQL
Скопировать код
-- Задача работать через полночь
SELECT *
FROM YourTable
WHERE (CAST(YourDateTimeColumn AS TIME) >= '22:00:00'
       OR CAST(YourDateTimeColumn AS TIME) <= '02:00:00');

Важность деталей!

Не пренебрегайте долями секунды при сравнении времени – могут быть важны даже миллисекунды.

Часовые пояса: Не только география

Не забывайте учесть часовые пояса. Используйте смещение и AT TIME ZONE для правильного преобразования времени.

Полезные материалы

  1. Преобразования даты и времени с использованием SQL Server — здесь представлены отличные методы использования функций CAST и CONVERT.
  2. DATEDIFF (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация Microsoft.
  3. FORMAT (Transact-SQL) – SQL Server | Microsoft Learn — применение функции FORMAT для удобного представления времени.
  4. Row Level Security в Power BI — о том, как обрабатывать различия в часовых поясах в SQL Server.