S
SQL: Реляционные базы данных
@relational_databases1.0K подп.
1.1Kпросмотров
30 августа 2025 г.
📷 ФотоScore: 1.2K
⌛ Основы по работе с датами в SQL. Часть 2/3 Привет, продолжаем разбор основ начатый в предыдущем посте. Там мы разобрали: ➖ Основные типы данных для хранения дат. ➖ Функции получения текущего времени. ➖ Извлечение отдельных компонентов даты и времени. Для инфо синтаксис в коде постов пишу для PostgreSQL (как популярной промышленной СУБД, для других логика похожа, но синтаксис может отличаться, гуглите) ⌛ Арифметика с датами: работа с интервалами SQL позволяет выполнять математические операции с датами — добавлять/вычитать дни, месяцы, годы и другие временные интервалы. -- Предположим, у нас есть дата: '2024-03-15 14:30:25' SELECT created_at, -- Исходная дата: 2024-03-15 14:30:25 -- Добавляем 7 дней (также можно и с месяцами - '2 months') -- Результат: 2024-03-22 14:30:25 created_at + INTERVAL '7 days' AS one_week_later, -- Вычитаем 3 дня -- Результат: 2024-03-12 14:30:25 created_at - INTERVAL '3 days' AS three_days_ago, -- Добавляем 1 год -- Результат: 2025-03-15 14:30:25 created_at + INTERVAL '1 year' AS next_year, -- Добавляем 3 часа -- Результат: 2024-03-15 17:30:25 created_at + INTERVAL '3 hours' AS three_hours_later, -- Добавляем 30 минут -- Результат: 2024-03-15 15:00:25 created_at + INTERVAL '30 minutes' AS thirty_minutes_later, -- Комбинируем интервалы -- Результат: 2025-04-22 17:45:25 (через 1 год, 1 месяц, 7 дней, 3 часа, 15 минут) created_at + INTERVAL '1 year' + INTERVAL '1 month' + INTERVAL '7 days' + INTERVAL '3 hours' + INTERVAL '15 minutes' AS complex_interval FROM orders WHERE id = 123; ⌛ Вычисление разницы между датами Часто нужно узнать, сколько времени прошло между двумя событиями — для этого есть специальные функции. -- Считаем разницу между двумя конкретными датами в днях -- Результат: 7 (разница в днях между 15 марта и 22 марта) SELECT '2024-03-22'::date - '2024-03-15'::date AS days_difference; -- Считаем разницу между датой заказа и текущей датой SELECT created_at, -- Дата создания заказа -- Текущая дата CURRENT_DATE, -- Сколько дней прошло с момента создания заказа -- Если результат отрицательный - заказ из будущего -- Если положительный - сколько дней прошло CURRENT_DATE - created_at::date AS days_since_order, -- Альтернативный способ: сколько дней до будущей даты '2024-12-31'::date - CURRENT_DATE AS days_until_new_year FROM orders WHERE id = 123; ⌛ Форматирование дат для отображения Иногда нужно представить дату в определённом формате — для отчётов, пользовательского интерфейса и т.д. -- Исходная дата: '2024-03-15 14:30:25' -- Хотим получить различные форматы отображения SELECT created_at, -- Исходное значение: 2024-03-15 14:30:25 -- Форматируем как: 15.03.2024 -- DD = день (01-31), MM = месяц (01-12), YYYY = год (4 цифры) TO_CHAR(created_at, 'DD.MM.YYYY') AS formatted_date_1, -- Форматируем как: 15/03/24 (день/месяц/год 2 цифры) -- YY = год (2 цифры) TO_CHAR(created_at, 'DD/MM/YY') AS formatted_date_2, -- Форматируем как: 15 марта 2024 -- Month = полное название месяца TO_CHAR(created_at, 'DD Month YYYY') AS formatted_date_3, -- Форматируем как: Пятница, 15 марта 2024 -- Day = полное название дня недели, Month = полное название месяца TO_CHAR(created_at, 'Day, DD Month YYYY') AS formatted_date_4, -- Форматируем как: 2024-03-15 (ISO формат) TO_CHAR(created_at, 'YYYY-MM-DD') AS iso_date, -- Форматируем время как: 14:30 -- HH24 = час (00-23), MI = минуты (00-59) TO_CHAR(created_at, 'HH24:MI') AS time_only, -- Форматируем как: 15.03.2024 14:30 TO_CHAR(created_at, 'DD.MM.YYYY HH24:MI') AS datetime_formatted FROM orders WH
1.1K
просмотров
4000
символов
Нет
эмодзи
Да
медиа

Другие посты @relational_databases

Все посты канала →
⌛ Основы по работе с датами в SQL. Часть 2/3 Привет, продолж — @relational_databases | PostSniper