SQL является языком для работы с базами данных. При записи и чтении дат часто возникает потребность в их форматировании. Данная статья рассматривает основные способы форматирования дат и времени в SQL.
Основные форматы дат в SQL
В SQL существует несколько типов данных для хранения дат и времени:
- DATE - для хранения дат;
- TIME - для хранения времени;
- DATETIME - для хранения даты и времени;
- TIMESTAMP - для хранения метки времени.
По умолчанию форматы отображения этих данных различаются в разных СУБД. Например, в MS SQL Server по умолчанию используется формат YYYY-MM-DD для дат и HH:MM:SS для времени.
Существует стандарт International Organization for Standardization (ISO) 8601 для записи дат и времени, согласно которому рекомендуется использовать форматы YYYY-MM-DD и HH:MM:SS соответственно. Этот формат хорош тем, что позволяет проводить сортировку по датам и упрощает вычисления интервалов между датами.
Функции форматирования дат в MS SQL Server
В MS SQL Server существует несколько функций для форматирования дат и времени:
Функция CONVERT
Эта функция позволяет конвертировать выражение из одного типа данных в другой и поддерживает множество стилей для форматирования дат и времени:
CONVERT(data_type(length), expression, style)
Например, чтобы отформатировать текущую дату в формате ДД.ММ.ГГГГ, можно использовать код стиля 104:
SELECT CONVERT(varchar(12), GETDATE(), 104);
Ms sql format date с помощью FORMAT
Начиная с версии SQL Server 2012 появилась более удобная функция FORMAT, которая использует строки форматирования .NET Framework:
FORMAT(value, format[, culture])
Например:
SELECT FORMAT(GETDATE(), 'd MMMM yyyy');
Эта функция не требует запоминать коды стилей и позволяет гибко настраивать формат вывода.
Форматирование дат в других СУБД
Давайте рассмотрим особенности работы с датами и их форматирование в некоторых других популярных СУБД.
MySQL
В MySQL есть несколько функций для форматирования дат и времени:
- DATE_FORMAT()
- TIME_FORMAT()
- STR_TO_DATE()
Также в MySQL 8 появилась функция FORMAT, похожая на аналогичную функцию в MS SQL Server.
PostgreSQL
PostgreSQL поддерживает гибкое форматирование дат с помощью функции TO_CHAR() и использования шаблонов формата.
Oracle
В Oracle для форматирования дат используются форматные модели TO_CHAR() и TO_DATE().
Форматирование дат в других СУБД
SQLite
В SQLite даты и время хранятся в текстовом формате ISO8601 по умолчанию. Для форматирования дат используются функции date() и time().
Например, чтобы отформатировать дату в формате "ДД.ММ.ГГГГ", можно воспользоваться выражением:
SELECT strftime('%d.%m.%Y', date_column) FROM my_table;
NoSQL базы данных
В не реляционных СУБД также есть возможности для форматирования дат, хотя они менее стандартизированы:
- В MongoDB даты хранятся в виде объектов Date, которые можно форматировать средствами языка программирования.
- В Redis используется строковое представление дат, которое форматируется на стороне клиента.
Обеспечение переносимости
Чтобы обеспечить переносимость работы с датами между разными СУБД, рекомендуется:
- Использовать стандартный формат ISO8601 для хранения дат;
- Форматировать даты на стороне клиента, а не в запросах;
- Использовать библиотеки дат, абстрагирующие различия СУБД.
Такой подход позволит избежать привязки бизнес-логики к особенностям конкретной СУБД.