⏳ Что такое дата и время в SQL?
SQL может хранить:
только дату (например,
2024-09-01)дату и время вместе (например,
2024-09-01 14:30:00)
В Oracle чаще всего используют типы:
DATE— хранит дату + время до секундTIMESTAMP— то же самое, но с миллисекундами и точностью повышеINTERVAL— разница между датами (например, «через 2 дня 3 часа»)
📦 Таблица-пример: события
| event_id | name | event_date |
|---|---|---|
| 1 | Экзамен | 2024-06-01 10:00:00 |
| 2 | Пересдача | 2024-06-15 14:00:00 |
| 3 | Зачёт | 2024-05-25 09:00:00 |
Тип поля event_date — DATE
🔍 Фильтрация по дате
1. Найти события после 1 июня 2024:
✅ TO_DATE() — превращает строку в дату
2. Найти события в определённом дне (например, 15 июня):
✅ TRUNC(date) — отбрасывает время, остаётся только дата
🛠 Извлекаем части даты
Хотим узнать, в какой день недели экзамен:
📋 Результат:
| name | weekday |
|---|---|
| Экзамен | Saturday |
| Пересдача | Saturday |
| Зачёт | Saturday |
✅ TO_CHAR(date, 'формат') — превращает дату в строку по шаблону.
| Формат | Что выводит |
|---|---|
'YYYY' | Год (2024) |
'MM' | Месяц (06) |
'DD' | День (01) |
'HH24' | Часы в 24-формате (14) |
'MI' | Минуты (30) |
'SS' | Секунды (00) |
'DAY' | День недели (Monday) |
📆 Разница между датами
Сколько дней между экзаменом и пересдачей?
📋 Пример результата:
| name | event_date | days_diff |
|---|---|---|
| Зачёт | 2024-05-25 09:00:00 | NULL |
| Экзамен | 2024-06-01 10:00:00 | 7 |
| Пересдача | 2024-06-15 14:00:00 | 14 |
✅ В Oracle: дата2 - дата1 = количество дней между ними
🧮 Добавление и вычитание
Добавим 7 дней к дате:
📋 Дата просто сдвинется на 7 дней вперёд.
Вычтем 3 часа из времени:
✅ 1 день = 1
✅ 1 час = 1/24
✅ 1 минута = 1/1440
🕓 CURRENT_DATE и SYSDATE
SYSDATE— текущая дата и время на сервере (в Oracle)CURRENT_DATE— тоже текущая дата, но зависит от часового пояса сессии
Пример:
🧪 Сравнение по частям даты
Найдём события в июне, любого года:
Только события в 2024 году:
📚 Форматирование даты
Хочу показать дату в виде «01.06.2024»:
📋 Результат: 01.06.2024
🕹 INTERVAL — работа с длительностью
✅ 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') |