Як часто ти бачив додатки, які працюють з датами та часом? Онлайн-замовлення, розклади, історія змін у базі — все це залежить від правильного зберігання часу. PostgreSQL дає круті інструменти для роботи з такими даними, і, звісно, таблиці з часом — це не страшні таблички з годинами і хвилинами, а чітка структура, яка дозволяє аналізувати та впорядковувати події.
Типи для дати та часу дозволяють:
- Зберігати тільки дату
DATE, тільки часTIMEабо і те, і інше разомTIMESTAMP. - Виконувати операції, такі як додавання днів, обчислення різниці між датами та фільтрація записів за часовими критеріями.
- Працювати з часовими зонами (але це тема для майбутніх лекцій).
Типи даних: DATE, TIME, TIMESTAMP
Тип даних DATE
Тип DATE призначений для зберігання тільки дати, без часу. Він записує рік, місяць і день. Цей тип корисний, коли:
- Треба зберегти день народження користувача.
- Дата події важлива, а час — ні.
Приклад формату: YYYY-MM-DD (рік-місяць-день).
Приклад:
| id | name - VARCHAR(100) | event_date - DATE |
|---|---|---|
| 1 | SQL Workshop | 2025-06-15 |
| 2 | Python | 2025-06-17 |
| 3 | Java Courses | 2025-06-25 |
Тип даних TIME
Тип TIME використовується для зберігання тільки часу. Він корисний, коли:
- Треба зберегти розклад, наприклад, початок робочого дня.
- Час має значення, а дата — ні.
Приклад формату: HH:MI:SS (години:хвилини:секунди).
Приклад:
| id | task_name - VARCHAR(100) | start_time - TIME |
|---|---|---|
| 1 | Team Meeting | 09:00:00 |
| 2 | Code Review | 11:30:00 |
| 3 | Client Call | 15:00:00 |
Тип даних TIMESTAMP
TIMESTAMP — це поєднання дати і часу. Він корисний, коли:
- Треба записати момент часу, наприклад, коли користувач зайшов у систему.
- Потрібна часова позначка для відстеження змін (логування).
Приклад формату: YYYY-MM-DD HH:MI:SS (рік-місяць-день години:хвилини:секунди).
Приклад:
| id | action - VARCHAR(100) | login_time - TIMESTAMP |
|---|---|---|
| 1 | User Login | 2023-10-15 14:30:00 |
| 2 | File Uploaded | 2023-10-15 15:10:00 |
| 3 | User Logout | 2023-10-15 16:45:00 |
Операції з датою та часом
Тепер, коли ми знаємо, які типи існують, давай розберемося, як з ними працювати. PostgreSQL дає купу вбудованих функцій для виконання операцій з датами і часом.
Витягування частин дати та часу
Якщо у тебе є часова мітка (TIMESTAMP), і ти хочеш витягнути тільки рік, місяць, день або годину, використовуй функцію EXTRACT.
Приклад:
SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS year;
-- Результат: 2025
SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS month;
-- Результат: 06
SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS day;
-- Результат: 15
Додавання і віднімання часових інтервалів
Хочеш дізнатися, що буде через тиждень? Або що було вчора? Використовуй операції з інтервалами.
Приклад:
-- Додавання 7 днів до поточної дати
SELECT CURRENT_DATE + INTERVAL '7 days' AS next_week;
-- Віднімання 1 місяця
SELECT CURRENT_DATE - INTERVAL '1 month' AS last_month;
Порівняння дат
Як дізнатися, що подія вже настала? Легше, ніж знайти баг у коді — просто порівняй значення.
Приклад:
SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- Вибираємо всі події в минулому
Більше про функції роботи з часом і датою ти дізнаєшся в наступних лекціях. Поки просто запам’ятай, що такі типи є — цього вистачить.
Проблеми часових зон і стандарт часу
Хоч у цій лекції ми ще не будемо занурюватися у деталі про часові зони, важливо згадати, що PostgreSQL підтримує тип TIMESTAMPTZ (мітка часу з урахуванням часової зони). Наприклад, 2023-10-15 14:30:00+02 показує, що це час для часового поясу UTC+2.
Ми обов’язково розберемо цю тему на курсі, але трохи пізніше :P
Приклад
Тепер час перевірити на практиці наші нові знання. Створимо таблицю, яка буде зберігати розклад занять студентів.
| id | subject_name | class_date - DATE | start_time - TIME | end_time - TIME | created_at - TIMESTAMP |
|---|---|---|---|---|---|
| 1 | Mathematics | 2023-10-16 | 09:00:00 | 10:30:00 | 2023-10-12 14:00:00 |
| 2 | Physics | 2023-10-16 | 11:00:00 | 12:30:00 | 2023-10-12 14:00:00 |
| 3 | Chemistry | 2023-10-17 | 09:00:00 | 10:30:00 | 2023-10-12 14:01:00 |
| 4 | Literature | 2023-10-17 | 11:00:00 | 12:30:00 | 2023-10-12 14:01:00 |
| 5 | Computer Science | 2023-10-18 | 10:00:00 | 11:30:00 | 2023-10-12 14:02:00 |
Через пару лекцій ти вже будеш створювати такі таблиці в базі за допомогою SQL-запитів. А поки просто милуємось :)
Типові помилки
Формат дати та часу: при вставці даних важливо дотримуватися правильного формату: YYYY-MM-DD для дат і HH:MI:SS для часу. PostgreSQL може не зрозуміти, якщо ти спробуєш вставити дату як "15/10/2023".
Невідповідність типів даних: спроба записати текстове значення у поле типу DATE призведе до помилки.
Помилки часових інтервалів: якщо ти додаєш, наприклад, 30 днів до лютого, PostgreSQL коректно це обробить, але дата може вже бути в березні.
Тепер ти знайомий з типами даних для роботи з датою та часом у PostgreSQL. У реальних проєктах це допомагає обробляти розклади, логувати події або відстежувати важливі штуки в системі!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ