Что такое дата и время в SQL? Обзор и примеры использования

⏳ Что такое дата и время в SQL?

SQL может хранить:

  • только дату (например, 2024-09-01)

  • дату и время вместе (например, 2024-09-01 14:30:00)

В Oracle чаще всего используют типы:

  • DATE — хранит дату + время до секунд

  • TIMESTAMP — то же самое, но с миллисекундами и точностью повыше

  • INTERVALразница между датами (например, «через 2 дня 3 часа»)


📦 Таблица-пример: события

event_idnameevent_date
1Экзамен2024-06-01 10:00:00
2Пересдача2024-06-15 14:00:00
3Зачёт2024-05-25 09:00:00

Тип поля event_dateDATE


🔍 Фильтрация по дате

1. Найти события после 1 июня 2024:

sql
SELECT * FROM events
WHERE event_date > TO_DATE('2024-06-01', 'YYYY-MM-DD');

TO_DATE() — превращает строку в дату


2. Найти события в определённом дне (например, 15 июня):

sql
SELECT * FROM events
WHERE TRUNC(event_date) = TO_DATE('2024-06-15', 'YYYY-MM-DD');

TRUNC(date) — отбрасывает время, остаётся только дата


🛠 Извлекаем части даты

Хотим узнать, в какой день недели экзамен:

sql
SELECT
name,
TO_CHAR(event_date, 'Day') AS weekday
FROM events;

📋 Результат:

nameweekday
ЭкзаменSaturday
ПересдачаSaturday
ЗачётSaturday

TO_CHAR(date, 'формат') — превращает дату в строку по шаблону.

ФорматЧто выводит
'YYYY'Год (2024)
'MM'Месяц (06)
'DD'День (01)
'HH24'Часы в 24-формате (14)
'MI'Минуты (30)
'SS'Секунды (00)
'DAY'День недели (Monday)

📆 Разница между датами

Сколько дней между экзаменом и пересдачей?

sql
SELECT
name,
event_date,
event_date - LAG(event_date) OVER(ORDER BY event_date) AS days_diff
FROM events;

📋 Пример результата:

nameevent_datedays_diff
Зачёт2024-05-25 09:00:00NULL
Экзамен2024-06-01 10:00:007
Пересдача2024-06-15 14:00:0014

✅ В Oracle: дата2 - дата1 = количество дней между ними


🧮 Добавление и вычитание

Добавим 7 дней к дате:

sql
SELECT
name,
event_date,
event_date + 7 AS next_week
FROM events;

📋 Дата просто сдвинется на 7 дней вперёд.


Вычтем 3 часа из времени:

sql
SELECT
name,
event_date,
event_date - 3/24 AS three_hours_before
FROM events;

✅ 1 день = 1
✅ 1 час = 1/24
✅ 1 минута = 1/1440


🕓 CURRENT_DATE и SYSDATE

  • SYSDATE — текущая дата и время на сервере (в Oracle)

  • CURRENT_DATE — тоже текущая дата, но зависит от часового пояса сессии

Пример:

sql
SELECT SYSDATE, CURRENT_DATE FROM dual;

🧪 Сравнение по частям даты

Найдём события в июне, любого года:

sql
SELECT * FROM events
WHERE EXTRACT(MONTH FROM event_date) = 6;

Только события в 2024 году:

sql
WHERE EXTRACT(YEAR FROM event_date) = 2024

📚 Форматирование даты

Хочу показать дату в виде «01.06.2024»:

sql
SELECT TO_CHAR(event_date, 'DD.MM.YYYY') FROM events;

📋 Результат: 01.06.2024


🕹 INTERVAL — работа с длительностью

sql
SELECT
event_date,
event_date + INTERVAL '1' DAY AS tomorrow,
event_date + INTERVAL '2' HOUR AS in_two_hours
FROM events;

INTERVAL '2' HOUR — добавляет ровно 2 часа
✅ Есть интервалы для MINUTE, SECOND, DAY, MONTH, YEAR


🏁 Резюме

Что делаемКак написать
Сравнить с датойWHERE date > TO_DATE('2024-06-01', 'YYYY-MM-DD')
Только дата (без времени)TRUNC(date)
Разница в дняхdate2 - date1
Добавить дниdate + 7
Добавить часыdate + INTERVAL '2' HOUR или date + 2/24
Получить год/месяц/деньEXTRACT(YEAR FROM date)
Вывести дату в красивом видеTO_CHAR(date, 'DD.MM.YYYY')
Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии