Menu
Coddy logo textTech

Работа с датами. Часть 3

Часть раздела Основы путешествия по SQL на Coddy. Урок 33 из 72.

SQL предоставляет несколько полезных функций для обработки и форматирования дат. Вот некоторые распространённые функции для работы с датами:

  1. DATE() — Преобразует строку в дату
  2. STRFTIME() — Форматирует даты в соответствии с указанными параметрами
  3. DATE('now') — Получает текущую дату:

Например, преобразуйте строку в дату:

SELECT DATE('2023-05-15 13:45:00')
-- Возвращает: 2023-05-15

SELECT DATE('now')
-- Возвращает текущую дату

Например, извлечь год, месяц и день из даты:

-- Получить год
SELECT STRFTIME('%Y', '2023-05-15')
-- Возвращает: 2023

-- Получить месяц
SELECT STRFTIME('%m', '2023-05-15')
-- Возвращает: 05

-- Получить день
SELECT STRFTIME('%d', '2023-05-15')
-- Возвращает: 15

-- Показать комбинацию года и дня (можно использовать любой разделитель)
SELECT STRFTIME('%Y:%d', '2023-05-15')
-- Возвращает: 2023:15

-- Использовать тире в качестве разделителя
SELECT STRFTIME('%d-%m-%Y', '2023-05-15')
-- Возвращает: 15-05-2023

-- Получить день недели
SELECT STRFTIME('%w', '2023-05-15')
-- Возвращает: 1 (понедельник; воскресенье — 0)

Распространённые спецификаторы формата:

  • %Y: год (4 цифры)
  • %m: месяц (01–12)
  • %d: день месяца (01–31)
  • %w: день недели (0–6, воскресенье — 0)
  • %H: час (00–23)
  • %M: минута (00–59)
  • %S: секунда (00–59)

Между спецификаторами можно использовать любой символ-разделитель (например, -, :, /). Например, STRFTIME('%d-%m-%Y', date) и STRFTIME('%d:%m:%Y', date) объединяют день, месяц и год, используя только разные разделители.

Вы можете объединять эти функции в запросах:

-- Найти все записи за текущий год
SELECT * FROM table1
WHERE STRFTIME('%Y', date_column) = STRFTIME('%Y', 'now')
challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • events: id, start, end

Напишите запрос, который показывает:

  • Идентификатор события
  • Дату начала в формате "DD-MM-YYYY". Назовите этот столбец formatted_start
  • Дату окончания в формате "DD-MM-YYYY". Назовите этот столбец formatted_end
  • Продолжительность в днях между началом и окончанием, округлённую до ближайшего целого числа. Назовите этот столбец duration_days

Оставьте только те строки, в которых год столбца start равен 2009 (STRFTIME() возвращает строку, а не число).

Отсортируйте результаты по продолжительности в днях в порядке убывания.

Напоминание: чтобы вычислить разницу между датами, используйте: JULIANDAY(end) - JULIANDAY(start), а для округления до целых чисел используйте ROUND().

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница SQL