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

Задание

Легко

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

  • <strong>events</strong>: <strong>id</strong>, <strong>start</strong>, <strong>end</strong>

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

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

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

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

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

Шпаргалка

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

  • DATE() - Преобразует строку в дату
  • STRFTIME() - Форматирует даты в соответствии с заданными параметрами
  • DATE('now') - Получает текущую дату

Преобразование строки в дату:

SELECT DATE('2023-05-15 13:45:00')
-- Returns: 2023-05-15

SELECT DATE('now')
-- Returns current date

Извлечение частей даты с помощью STRFTIME():

-- Get year
SELECT STRFTIME('%Y', '2023-05-15')
-- Returns: 2023

-- Get month
SELECT STRFTIME('%m', '2023-05-15')
-- Returns: 05

-- Get day
SELECT STRFTIME('%d', '2023-05-15')
-- Returns: 15

-- Show combination of year and day
SELECT STRFTIME('%Y:%d', '2023-05-15')
-- Returns: 2023:15

Общие спецификаторы формата:

  • %Y: Год (4 цифры)
  • %m: Месяц (01-12)
  • %d: День месяца (01-31)
  • %H: Час (00-23)
  • %M: Минута (00-59)
  • %S: Секунда (00-59)

Использование в предложениях WHERE:

-- Find all records from current year
SELECT * FROM table1
WHERE STRFTIME('%Y', date_column) = STRFTIME('%Y', 'now')

Вычисление разницы дат с помощью JULIANDAY():

JULIANDAY(end_date) - JULIANDAY(start_date)

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

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

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

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