TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
SQL: Реляционные базы данных

28 Aug 2025, 18:01

Открыть в Telegram Поделиться Пожаловаться

⌛ Основы по работе с датами в 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
🌎 Мой ИТ-стартап

617 0 11 9 35
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot