Преобразование даты в строку
Речь пойдет о форматировании даты. Форматирование даты обычно используется для представления даты/времени в отчетах, подготовленных для печати. Как правило, такое форматирование выполняется средствами разработки отчетов. Однако и на уровне СУБД есть подобные возможности. Мы не будем здесь обсуждать вопрос о том, где лучше выполнять данное форматирование. Отметим лишь, что в ряде задач на сайте sql-ex.ru требуется представить результат выполнения запроса в том или ином конкретном формате.
SQL Server
Для форматирования даты в SQL Server используется функция CONVERT.
Будем рассматривать в качестве примера дату, возвращаемую следующим запросом:
[[ column ]] |
---|
NULL
[[ value ]] |
b_datetime |
---|
2002-06-01 01:13:39.000 |
Например, чтобы получить из этого представления временной метки только дату в привычном нам формате “dd-mm-yyyy”, достаточно написать
[[ column ]] |
---|
NULL
[[ value ]] |
Для вывода в формате “mm-dd-yyyy” можно в функции CONVERT поменять параметр стиля на 110:
[[ column ]] |
---|
NULL
[[ value ]] |
Для вывода одной лишь компоненты времени без миллисекунд используется стиль 108:
[[ column ]] |
---|
NULL
[[ value ]] |
MySQL
В MySQL для форматирования даты используется функция DATE_FORMAT, в которой вторым параметром является маска, в соответствии с которой форматируется первый параметр типа даты/времени. Рассмотренные выше примеры для MYSQL можно переписать следующим образом:
[[ column ]] |
---|
NULL
[[ value ]] |
[[ column ]] |
---|
NULL
[[ value ]] |
[[ column ]] |
---|
NULL
[[ value ]] |
Заметим, что “H” используется для представления 24-часового формата времени, а “h” - для 12-часового формата.
PostgreSQL & Oracle
Эти СУБД используют для форматирования функцию TO_CHAR с интуитивно понятной маской. Наши примеры для PostgreSQL будут выглядеть так:
[[ column ]] |
---|
NULL
[[ value ]] |
[[ column ]] |
---|
NULL
[[ value ]] |
[[ column ]] |
---|
NULL
[[ value ]] |
Для Oracle принципиальных отличий нет. Чтобы примеры, приведенные для PostgreSQL, работали в Oracle, нам нужно знать, что строковое представление даты нужно явно преобразовывать к соответствующему темпоральному типу (при сравнениях с датой). Кроме того, не поддерживается стандартное представление временной метки с разделителем “T” между датой и временем. Например, последний пример в Oracle будет иметь вид:
[[ column ]] |
---|
NULL
[[ value ]] |