loading..
Русский    English
11:48
листать

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

Речь пойдет о форматировании даты. Форматирование даты обычно используется для представления даты/времени в отчетах, подготовленных для печати. Как правило, такое форматирование выполняется средствами разработки отчетов. Однако и на уровне СУБД есть подобные возможности. Мы не будем здесь обсуждать вопрос о том, где лучше выполнять данное форматирование. Отметим лишь, что в ряде задач на сайте sql-ex.ru требуется представить результат выполнения запроса в том или ином конкретном формате.

SQL Server

Для форматирования даты в SQL Server используется функция CONVERT.

Будем рассматривать в качестве примера дату, возвращаемую следующим запросом:

Консоль
Выполнить
  1. SELECT b_datetime FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

b_datetime
2002-06-01 01:13:39.000

Например, чтобы получить из этого представления временной метки только дату в привычном нам формате "dd-mm-yyyy", достаточно написать

Консоль
Выполнить
  1. SELECT CONVERT(varchar, b_datetime, 105)
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01-06-2002

Для вывода в формате "mm-dd-yyyy" можно в функции CONVERT поменять параметр стиля на 110:

Консоль
Выполнить
  1. SELECT CONVERT(varchar,b_datetime,110)
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

06-01-2002

Для вывода одной лишь компоненты времени без миллисекунд используется стиль 108:

Консоль
Выполнить
  1. SELECT CONVERT(varchar, b_datetime, 108)
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01:13:39

MySQL

В MySQL для форматирования даты используется функция DATE_FORMAT, в которой вторым параметром является маска, в соответствии с которой форматируется первый параметр типа даты/времени. Рассмотренные выше примеры для MYSQL можно переписать следующим образом:

  1. SELECT date_format(b_datetime,'%d-%m-%Y')
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01-06-2002

  1. SELECT date_format(b_datetime,'%m-%d-%Y')
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

06-01-2002

  1. SELECT date_format(b_datetime,'%H:%i:%s')
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01:13:39

Заметим, что "H" используется для представления 24-часового формата времени, а "h" - для 12-часового формата.

PostgreSQL & Oracle

Эти СУБД используют для форматирования функцию TO_CHAR с интуитивно понятной маской. Наши примеры для PostgreSQL будут выглядеть так:

  1. SELECT to_char(b_datetime,'dd-mm-yyyy')
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01-06-2002

  1. SELECT to_char(b_datetime,'mm-dd-yyyy')
  2. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

06-01-2002

  1. --12-часовой формат
  2. SELECT to_char(b_datetime,'hh12:mi:ss')
  3. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';
  4. --24-часовой формат
  5. SELECT to_char(b_datetime,'hh24:mi:ss')
  6. FROM utb WHERE b_datetime='2002-06-01T01:13:39.000';

01:13:39

Для Oracle принципиальных отличий нет. Чтобы примеры, приведенные для PostgreSQL, работали в Oracle, нам нужно знать, что строковое представление даты нужно явно преобразовывать к соответствующему темпоральному типу (при сравнениях с датой). Кроме того, не поддерживается стандартное представление временной метки с разделителем "T" между датой и временем. Например, последний пример в Oracle будет иметь вид:

  1. SELECT to_char(b_datetime,'hh24:mi:ss')
  2. FROM utb WHERE b_datetime=timestamp'2002-06-01 01:13:39.000';


Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
Бетонное межэтажное перекрытие
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.