Работа с датами. Часть 3
Часть раздела Основы путешествия по SQL на Coddy — урок 33 из 72.
SQL предоставляет несколько полезных функций для манипулирования и форматирования дат. Вот некоторые распространенные функции для работы с датами:
DATE()- Преобразует строку в датуSTRFTIME()- Форматирует даты в соответствии с указанными параметрами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')Задание
ЛегкоДоступные таблицы и столбцы:
<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)Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов