Ms sql конвертация даты в строку

Ms sql конвертация даты в строку

Когда мы присваиваем значение одного одного типа столбцу, который хранит данные другого типа, либо выполняем операции, которые вовлекают данные разных типов, SQL Server пытается выполнить преобразование и привести используемое значение к нужному типу. Но не все преобразования SQL Server может выполнить автоматически. SQL Server может выполнять неявные преобразования от типа с меньшим приоритетом к типу с большим приоритетом. Таблица приоритетов (чем выше, тем больший приоритет):

datetime
smalldatetime
float
real
decimal
money
smallmoney
int
smallint
tinyint
bit
nvarchar
nchar
varchar
char

То есть SQL Server автоматически может преобразовать число 100.0 (float) в дату и время (datetime).

В тех случаях, когда необходимо выполнить преобразования от типов с высшим приоритетом к типам с низшим приоритетом, то надо выполнять явное приведение типов. Для этого в T-SQL определены две функции: CONVERT и CAST .

Функция CAST преобразует выражение одного типа к другому. Она имеет следующую форму:

Для примера возьмем следующие таблицы:

Например, при выводе информации о заказах преобразует числовое значение и дату в строку:

Convert

Большую часть преобразований охватывает функция CAST. Если же необходимо какое-то дополнительное форматирование, то можно использовать функцию CONVERT . Она имеет следующую форму:

Третий необязательный параметр задает стиль форматирования данных. Этот параметр представляет числовое значение, которое для разных типов данных имеет разную интерпретацию. Например, некоторые значения для форматирования дат и времени:

0 или 100 — формат даты "Mon dd yyyy hh:miAM/PM" (значение по умолчанию)

1 или 101 — формат даты "mm/dd/yyyy"

3 или 103 — формат даты "dd/mm/yyyy"

7 или 107 — формат даты "Mon dd, yyyy hh:miAM/PM"

8 или 108 — формат даты "hh:mi:ss"

10 или 110 — формат даты "mm-dd-yyyy"

Читайте также:  Самая большая глубина на которую погружался человек

14 или 114 — формат даты "hh:mi:ss:mmmm" (24-часовой формат времени)

Некоторые значения для форматирования данных типа money в строку:

0 — в дробной части числа остаются только две цифры (по умолчанию)

1 — в дробной части числа остаются только две цифры, а для разделения разрядов применяется запятая

2 — в дробной части числа остаются только четыре цифры

Например, выведем дату и стоимость заказов с форматированием:

TRY_CONVERT

При использовании функций CAST и CONVERT SQL Server выбрасывает исключение, если данные нельзя привести к определенному типу. Например:

Чтобы избежать генерации исключения можно использовать функцию TRY_CONVERT . Ее использование аналогично функции CONVERT за тем исключением, что если выражение не удается преобразовать к нужному типу, то функция возвращает NULL:

Дополнительные функции

Кроме CAST, CONVERT, TRY_CONVERT есть еще ряд функций, которые могут использоваться для преобразования в ряд типов:

STR(float [, length [,decimal]]) : преобразует число в строку. Второй параметр указывает на длину строки, а третий — сколько знаков в дробной части числа надо оставлять

CHAR(int) : преобразует числовой код ASCII в символ. Нередко используется для тех ситуаций, когда необходим символ, который нельзя ввести с клавиатуры

ASCII(char) : преобразует символ в числовой код ASCII

NCHAR(int) : преобразует числовой код UNICODE в символ

UNICODE(char) : преобразует символ в числовой код UNICODE

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

Читайте также:  Что такое стек процесса

SQL Server

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

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

b_datetime
2002-06-01 01:13:39.000

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

01-06-2002

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

06-01-2002

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

01:13:39

MySQL

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

01-06-2002
06-01-2002
01:13:39

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

PostgreSQL & Oracle

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

01-06-2002
06-01-2002
01:13:39

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

В таблицах БД нашей СРМ-ки дата хранится в очень странном формате: YYYY-DD-MM (и, да, это еще строка). Поступило задание залить в таблицу данные из другой БД, где дата хранится в подобающем ей формате DATETIME2(YYYY-MM-DD) .

Как конвертнуть дату в строку с изменением формата?

2 ответа 2

Самый простой способ это воспользоваться функцией CONVERT

Это выглядит вот так:

Читайте также:  Как посмотреть закладки в одноклассниках

Вот список допустимых шаблонов форматов даты:

И результат выполнения

Будьте аккуратны с форматом YYYY-MM-DD, он зависит от настроек языка. Лучший стандарт по ISO — YYYYMMDD. Более подробно можно прочитать тут, но на английском.

Что делать, если нет нужного формата

Можно воспользоваться следующим методом:

Как вы понимаете на больших объёмах это будет работать не очень быстро.

Начиная с SQL Server 2012 появилась встроенная функция FORMAT:

Больше вариантов по произвольному формированию даты можно посмотреть тут

Ссылка на основную публикацию
Adblock detector