⌛ Основы по работе с датами в SQL. Часть 1/3
Работа с датами и временем — это неотъемлемая часть большинства SQL-запросов. Независимо от того, анализируете ли вы продажи по месяцам, фильтруете данные за определённый период или рассчитываете сроки выполнения задач — понимание работы с датами просто необходимо. Перед тем как начинать работать с датами, важно понять, как именно они хранятся в различных СУБД (определите вашу и погуглите какой синтаксис она приветствует), это поможет избежать множества ошибок и неожиданностей.
⌛ Основные типы данных для хранения дат:
➖ DATE — хранит только дату без времени
➖Формат: YYYY-MM-DD (например: 2024-03-15)
➖Диапазон: от 1000-01-01 до 9999-12-31
➖Использование: когда важна только дата (день рождения, дата регистрации)
➖TIME — хранит только время суток
➖Формат: HH:MM:SS (например: 14:30:25)
➖Может включать: микросекунды HH:MM:SS.ffffff
➖Использование: время начала/окончания рабочего дня, длительность процессов
➖ DATETIME — хранит дату и время вместе
➖Формат: YYYY-MM-DD HH:MM:SS (например: 2024-03-15 14:30:25)
➖Диапазон: от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
➖Использование: временные метки событий, логи
➖ TIMESTAMP — похож на DATETIME, но с важными отличиями:
➖Диапазон: от 1970-01-01 00:00:01 UTC до 2038-01-19 03:14:07 UTC
➖Автоматическое обновление: может обновляться при изменении строки
➖Часовой пояс: часто зависит от настроек сервера
➖Использование: когда важна временная зона и автоматическое обновление
Дальше распишу функционал внутри кода, для наглядности.
⌛ Функции получения текущего времени.
Эти функции используются постоянно — для фильтрации свежих данных, создания временных меток, сравнения с прошлыми значениями.
-- Получаем только текущую дату (без времени)
-- Результат будет примерно таким: 2024-03-15
SELECT CURRENT_DATE;
-- Альтернатива:
SELECT CURDATE(); -- То же самое в MySQL
-- Получаем текущую дату и время
-- Результат будет примерно таким: 2024-03-15 16:45:30
SELECT NOW();
-- Альтернативы:
SELECT CURRENT_TIMESTAMP; -- То же самое, что и NOW()
SELECT LOCALTIME(); -- В некоторых СУБД
SELECT LOCALTIMESTAMP(); -- В некоторых СУБД
-- Получаем только текущее время (без даты)
-- Результат будет примерно таким: 16:45:30
SELECT CURRENT_TIME;
-- Альтернатива:
SELECT CURTIME(); -- То же самое в MySQL
⌛ Извлечение отдельных компонентов даты и времени.
Часто нужно получить отдельные части даты — год, месяц, день и т.д. Для этого используются функции извлечения.
-- Представим, что у нас есть таблица orders с полем created_at
-- Значение created_at: '2024-03-15 14:30:25'
SELECT
created_at, -- Исходное значение: 2024-03-15 14:30:25
-- Извлекаем год из даты
-- Результат: 2024
EXTRACT(YEAR FROM created_at) AS order_year,
-- Извлекаем месяц из даты
-- Результат: 3 (март)
EXTRACT(MONTH FROM created_at) AS order_month,
-- Извлекаем день месяца
-- Результат: 15
EXTRACT(DAY FROM created_at) AS order_day,
-- Извлекаем день недели (1 = воскресенье, 2 = понедельник, ...)
-- Результат: 6 (пятница)
EXTRACT(DOW FROM created_at) AS day_of_week,
-- Извлекаем день года (1-365/366)
-- Результат: 75 (15 марта — 75-й день года)
EXTRACT(DOY FROM created_at) AS day_of_year,
-- Извлекаем час
-- Результат: 14
EXTRACT(HOUR FROM created_at) AS order_hour,
-- Извлекаем минуты
-- Результат: 30
EXTRACT(MINUTE FROM created_at) AS order_minute,
-- Извлекаем секунды
-- Результат: 25
EXTRACT(SECOND FROM created_at) AS order_second,
-- Извлекаем квартал года (1-4)
-- Результат: 1 (первый квартал)
EXTRACT(QUARTER FROM created_at) AS quarter,
-- Извлекаем номер недели года (1-53)
-- Результат: 11
EXTRACT(WEEK FROM created_at) AS week_number
FROM orders
WHERE id = 123; -- Для примера берём конкретную запись
Завтра выложу вторую часть поста, где покажу работу с интервалами, вычисление дельт между датами и варианты форматирования дат.
#SQL
📱 Подписаться на канал
💻 Курс автора по SQL DDL
🌎 Мой ИТ-стартап
Работа с датами и временем — это неотъемлемая часть большинства SQL-запросов. Независимо от того, анализируете ли вы продажи по месяцам, фильтруете данные за определённый период или рассчитываете сроки выполнения задач — понимание работы с датами просто необходимо. Перед тем как начинать работать с датами, важно понять, как именно они хранятся в различных СУБД (определите вашу и погуглите какой синтаксис она приветствует), это поможет избежать множества ошибок и неожиданностей.
⌛ Основные типы данных для хранения дат:
➖ DATE — хранит только дату без времени
➖Формат: YYYY-MM-DD (например: 2024-03-15)
➖Диапазон: от 1000-01-01 до 9999-12-31
➖Использование: когда важна только дата (день рождения, дата регистрации)
➖TIME — хранит только время суток
➖Формат: HH:MM:SS (например: 14:30:25)
➖Может включать: микросекунды HH:MM:SS.ffffff
➖Использование: время начала/окончания рабочего дня, длительность процессов
➖ DATETIME — хранит дату и время вместе
➖Формат: YYYY-MM-DD HH:MM:SS (например: 2024-03-15 14:30:25)
➖Диапазон: от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
➖Использование: временные метки событий, логи
➖ TIMESTAMP — похож на DATETIME, но с важными отличиями:
➖Диапазон: от 1970-01-01 00:00:01 UTC до 2038-01-19 03:14:07 UTC
➖Автоматическое обновление: может обновляться при изменении строки
➖Часовой пояс: часто зависит от настроек сервера
➖Использование: когда важна временная зона и автоматическое обновление
Дальше распишу функционал внутри кода, для наглядности.
⌛ Функции получения текущего времени.
Эти функции используются постоянно — для фильтрации свежих данных, создания временных меток, сравнения с прошлыми значениями.
-- Получаем только текущую дату (без времени)
-- Результат будет примерно таким: 2024-03-15
SELECT CURRENT_DATE;
-- Альтернатива:
SELECT CURDATE(); -- То же самое в MySQL
-- Получаем текущую дату и время
-- Результат будет примерно таким: 2024-03-15 16:45:30
SELECT NOW();
-- Альтернативы:
SELECT CURRENT_TIMESTAMP; -- То же самое, что и NOW()
SELECT LOCALTIME(); -- В некоторых СУБД
SELECT LOCALTIMESTAMP(); -- В некоторых СУБД
-- Получаем только текущее время (без даты)
-- Результат будет примерно таким: 16:45:30
SELECT CURRENT_TIME;
-- Альтернатива:
SELECT CURTIME(); -- То же самое в MySQL
⌛ Извлечение отдельных компонентов даты и времени.
Часто нужно получить отдельные части даты — год, месяц, день и т.д. Для этого используются функции извлечения.
-- Представим, что у нас есть таблица orders с полем created_at
-- Значение created_at: '2024-03-15 14:30:25'
SELECT
created_at, -- Исходное значение: 2024-03-15 14:30:25
-- Извлекаем год из даты
-- Результат: 2024
EXTRACT(YEAR FROM created_at) AS order_year,
-- Извлекаем месяц из даты
-- Результат: 3 (март)
EXTRACT(MONTH FROM created_at) AS order_month,
-- Извлекаем день месяца
-- Результат: 15
EXTRACT(DAY FROM created_at) AS order_day,
-- Извлекаем день недели (1 = воскресенье, 2 = понедельник, ...)
-- Результат: 6 (пятница)
EXTRACT(DOW FROM created_at) AS day_of_week,
-- Извлекаем день года (1-365/366)
-- Результат: 75 (15 марта — 75-й день года)
EXTRACT(DOY FROM created_at) AS day_of_year,
-- Извлекаем час
-- Результат: 14
EXTRACT(HOUR FROM created_at) AS order_hour,
-- Извлекаем минуты
-- Результат: 30
EXTRACT(MINUTE FROM created_at) AS order_minute,
-- Извлекаем секунды
-- Результат: 25
EXTRACT(SECOND FROM created_at) AS order_second,
-- Извлекаем квартал года (1-4)
-- Результат: 1 (первый квартал)
EXTRACT(QUARTER FROM created_at) AS quarter,
-- Извлекаем номер недели года (1-53)
-- Результат: 11
EXTRACT(WEEK FROM created_at) AS week_number
FROM orders
WHERE id = 123; -- Для примера берём конкретную запись
Завтра выложу вторую часть поста, где покажу работу с интервалами, вычисление дельт между датами и варианты форматирования дат.
#SQL
📱 Подписаться на канал
💻 Курс автора по SQL DDL
🌎 Мой ИТ-стартап