Convert функция sql: Функции CAST и CONVERT (Transact-SQL) — SQL Server
Содержание
Функция SQL CONVERT сервера ()
Функция SQL Server DATEDIFF (): Предыдущий
SQL Дата сервера Функции
Определение и использование
Функция CONVERT () является общая функция для преобразования даты в новый тип данных.
Функция CONVERT () может отображать данные о дате / времени в различных форматах.
грамматика
CONVERT(data_type(length),expression,style)
值 | 描述 |
---|---|
data_type(length) | 规定目标数据类型(带有可选的长度)。 |
expression | 规定需要转换的值。 |
style | 规定日期/时间的输出格式。 |
В следующей таблице приведены значения стиля из DateTime или smalldatetime для символьных данных:
值 (世纪 yy) | 值 (世纪 yyyy) | 输入/输出 | 标准 |
---|---|---|---|
— | 0 or 100 | mon dd yyyy hh:miAM (or PM) | Default |
1 | 101 | mm/dd/yy | USA |
2 | 102 | yy.![]() | ANSI |
3 | 103 | dd/mm/yy | British/French |
4 | 104 | dd.mm.yy | German |
5 | 105 | dd-mm-yy | Italian |
6 | 106 | dd mon yy | |
7 | 107 | Mon dd, yy | |
8 | 108 | hh:mm:ss | |
— | 9 or 109 | mon dd yyyy hh:mi:ss:mmmAM (or PM) |
Default+millisec |
10 | 110 | mm-dd-yy | USA |
11 | 111 | yy/mm/dd | Japan |
12 | 112 | yymmdd | ISO |
— | 13 or 113 | dd mon yyyy hh:mi:ss:mmm (24h) | |
14 | 114 | hh:mi:ss:mmm (24h) | |
— | 20 or 120 | yyyy-mm-dd hh:mi:ss (24h) | |
— | 21 or 121 | yyyy-mm-dd hh:mi:ss.![]() | |
— | 126 | yyyy-mm-ddThh:mi:ss.mmm (no spaces) |
ISO8601 |
— | 130 | dd mon yyyy hh:mi:ss:mmmAM | Hijiri |
— | 131 | dd/mm/yy hh:mi:ss:mmmAM | Hijiri |
примеров
Следующий скрипт использует функцию CONVERT () для отображения другого формата. Мы будем использовать функцию GETDATE (), чтобы получить текущую дату / время:
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
Результаты следующие:
Nov 04 2011 11:45 PM
11-04-11
11-04-2011
04 Nov 11
04 Nov 2011
04 Nov 2011 11:45:34:243
SQL Дата сервера Функции
Функция SQL Server DATEDIFF (): Предыдущий
MS SQL Server.
Преобразование из ASCII в HEX и обратно
Попросили меня написать скрипт, который конвертировал данные из одной таблицы в другую. При этом одно из текстовых полей нужно «привести к верхнему регистру, взять символы в обратном порядке и преобразовать их из ASCII в HEX». Например, строка «XYZ» должна превратиться в «5A5958». Привести к верхнему регистру и взять символы в обратном порядке – это делают встроенные строковые функции UPPER и REVERSE. Но, преобразование из ASCII в HEX поставило меня в тупик. Гугл мне в помощь!
Поиск дал множество самописных функций для преобразования символов из ASCII в HEX. И когда я уже хотел выбрать одну из них, на одном из форумов я натолкнулся на запрос:
select CAST('ZYX' as varbinary)
Он возвращает 0x5A5958. Простая, но хорошая идея. Остается двоичные данные преобразовать в строку и избавиться от «0x». Использование в запросе CAST натолкнуло меня на мысль проверить, как работает с varbinary функция CONVER, которая имеет дополнительный параметр конвертации – «style»:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Если конвертация производится между типами данных binary/varbinary и char/varchar, то параметр style может принимать значение от 0 до 2.
По умолчанию параметр style равен 0. В этом режиме функция CONVER преобразует символы ASCII в двоичные данные либо двоичные данные в символы ASCII. Запрос
select CONVERT(varbinary(max), 'ZYX')
аналогично CAST, преобразует строку в двоичные данные и вернет 0x5A5958. Соответственно запрос
select CONVERT(varchar(max), 0x5A5958)
произведет обратное преобразование двоичных данных в строку «ZYX».
Если параметр style равен 1 или 2, то функция CONVER преобразует binary/varbinary в char/varchar и наоборот. Значение параметра style указывает на наличие символов 0x слева: 1 – символы есть, 2 – символов нет.
Преобразование строки в двоичные данные:
Преобразование двоичных данных в строку:
Обратите внимание на строку 2 в результатах – это то, что надо мне по заданию. Значит для того, чтобы представить ASCII-символы в шестнадцатеричном виде необходимо преобразовать строку в двоичные данные с параметром style равным 0, а полученный результат преобразовать в строку с параметром style равным 2:
CONVERT(varchar(max), CONVERT(varbinary(max), 'ZYX'), 2)
Для обратного преобразования строки, записанной в шестнадцатеричном виде в ASCII, необходимо преобразовать строку в двоичные данные с параметром style равным 2, а полученный результат преобразовать в строку с параметром style равным 0:
CONVERT(varchar(max), CONVERT(varbinary(max), '5A5958', 2))
Для полноты освещения вопроса стоит упомянуть еще о недокументированной функции MS SQL Server для преобразования двоичных данных в строку:
create function sys.fn_varbintohexsubstring ( @fsetprefix bit = 1 -- append '0x' to the output ,@pbinin varbinary(max) -- input binary stream ,@startoffset int = 1 -- starting offset ,@cbytesin int = 0 -- length of input to consider, 0 means total length ) returns nvarchar(max)
Что бы записать строку шестнадцатеричными символами без символов 0x, как в примере с использованием функции CONVERT, вызовем fn_varbintohexsubstring с параметром @fsetprefix равным 0 и преобразуем результат к верхнему регистру:
UPPER(sys.fn_varbintohexsubstring(0, CONVERT(varbinary(max), 'ZYX'), 1, 0))
Функция
SQL Server CONVERT, поясняемая практическими примерами
Резюме : в этом руководстве вы узнаете, как использовать функцию SQL Server CONVERT()
для преобразования значения одного типа в другой.
Введение в SQL Server
Функция CONVERT()
Функция CONVERT()
позволяет преобразовать значение одного типа в другой.
Ниже показан синтаксис функции CONVERT()
:
Язык кода: SQL (язык структурированных запросов) (sql)
ПРЕОБРАЗОВАТЬ (тип_цели [(длина)], выражение [ стиль])
В этом синтаксисе:
-
target_type
— целевой тип данных, в который вы хотите преобразовать выражение. Он включаетINT
,BIT
,SQL_VARIANT
и т. д. Обратите внимание, что это не может быть псевдонимом типа данных. -
длина
— целое число, указывающее длину целевого типа.длина
является необязательной и по умолчанию равна 30. -
выражение
является допустимым выражением любого типа, которое будет преобразовано. -
стиль
— это необязательное целое число, определяющее, как функцияCONVERT()
будет преобразовывать выражение.Если стиль равен NULL, функция
CONVERT()
вернет NULL.
Функция CONVERT()
возвращает значение выражения
, переведенное в target_type
с указанным стилем
.
Функция CONVERT()
аналогична функции CAST()
. Однако это специфично для SQL Server. Напротив, функция CAST()
является частью функций ANSI-SQL, которые широко доступны во многих других продуктах баз данных.
SQL Server
CONVERT()
примеры функций
Давайте рассмотрим несколько примеров использования функции CONVERT()
.
A) Использование
CONVERT() 9Функция 0006 для преобразования десятичного числа в целое пример
В этом примере используется функция
CONVERT()
для преобразования десятичного числа 9,95 в целое число:
SELECT CONVERT(INT, 9,95) результат;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
результат
-----------
9
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
B) Использование функции
CONVERT()
для преобразования десятичного числа в другое десятичное число другой длины пример
В этом примере функция
CONVERT()
используется для преобразования десятичного числа 9,95
в другое десятичное число с нулевой шкалой:
SELECT CAST(9.
95 AS DEC(2,0)) результат;
Язык кода: SQL (язык структурированных запросов) (sql)
Вывод выглядит следующим образом:
результат
-----------
10
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
Обратите внимание, что поведение округления и усечения функции
CONVERT()
такое же, как и у функций CAST()
.
C) Использование функции
CONVERT()
для преобразования строки в значение даты и времени пример
В этом примере функция
CONVERT()
используется для преобразования строки '2019-03-14'
в значение даты и времени :
ВЫБЕРИТЕ
CONVERT(DATETIME, '2019-03-14') результат;
Язык кода: SQL (язык структурированных запросов) (sql)
Результат:
результат
-----------------------
2019-03-14 00:00:00.
000
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
D) Использование функции
CONVERT()
для преобразования значения datetime в строковое значение example
В этом примере используется
CONVERT() 9Функция 0006 для преобразования текущей даты и времени в строку с определенным стилем:
SELECT
CONVERT(VARCHAR, GETDATE(),13) результат;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
результат
------------------------------
14 мар 2019 08:59:01:380
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
Из этого руководства вы узнали, как использовать SQL Server
CONVERT()
Функция для преобразования значения из одного типа в другой.
Преобразование даты и времени в строку в указанном формате в SQL Server
Преобразование даты и времени в строку в указанном формате в SQL Server
Резюме : в этом руководстве вы узнаете, как преобразовать дату и время в строку в SQL Server с помощью функции
CONVERT()
.
Использование функции
Использование функции
CONVERT()
для преобразования даты и времени в строку
Чтобы преобразовать дату и время в строку, вы используете функцию
CONVERT()
следующим образом:
CONVERT(VARCHAR, datetime [style])
Язык кода: SQL (язык структурированных запросов) (sql)
В этом синтаксисе:
первый аргумент представляет строку VARCHAR 9006 тип.
datetime
— это выражение, которое оценивает значение даты или даты и времени, которое вы хотите преобразовать в строкуsytle
указывает формат даты.Значение стиля — это число, предопределенное SQL Server. 9Параметр стиля 0005
В следующей таблице показаны допустимый стиль и соответствующий формат даты и времени после преобразования в строку.
9
9
9
8 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9058 9.
строка в формате
mon dd yyyy hh:miAM (или PM) 9Пример формата 0006
DECLARE @dt DATETIME = '2019-12-31 14:43:35.863';
ВЫБРАТЬ
ПРЕОБРАЗОВАТЬ(VARCHAR(20),@dt,0) s1,
CONVERT(VARCHAR(20),@dt,100) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
s1 s2
-------------------- --------------------
31 дек 2019 14:43 31 дек 2019 14:43
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
2) Преобразование даты и времени в строку в формате
2) Преобразование даты и времени в строку в формате
мм/дд/гг
и мм/дд/гггг
Пример
DECLARE @dt DATETIME = '2019-12-31 14:43:35.
863'35;
ВЫБРАТЬ
ПРЕОБРАЗОВАТЬ(VARCHAR(10),@dt,1) s1,
CONVERT(VARCHAR(10),@dt,101) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
s1 s2
---------- ----------
31.12.19 31.12.2019
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
3) Преобразование даты и времени в строку в формате
3) Преобразование даты и времени в строку в формате
mon dd yyyy hh:miAM (или PM)
пример формата
DECLARE @dt DATETIME9 = '20101 12-31 14:43:35,863';
ВЫБРАТЬ
ПРЕОБРАЗОВАТЬ(VARCHAR(10),@dt,3) s1,
CONVERT(VARCHAR(10),@dt,103) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
s1 s2
---------- ----------
31.
12.1931.12.2019
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
4) Преобразование даты и времени в строку в формате
4) Преобразование даты и времени в строку в формате
dd.mm.yy
и dd.mm.yyyy
пример форматов
DETECLTIME @
900 = '2019-12-31 14:43:35.863';
ВЫБРАТЬ
ПРЕОБРАЗОВАТЬ(VARCHAR(10),@dt,4) s1,
CONVERT(VARCHAR(10),@dt,104) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
с1 с2
---------- ----------
31.12.19 31.12.2019
(затронут 1 ряд)
Язык кода: SQL (язык структурированных запросов) (sql)
5) Преобразование даты и времени в строку в формате
dd-mm-yy
dd-mm-yyyy
пример форматов
DECLARE @dt '2019-12-31 14:43:35.
863';
ВЫБРАТЬ
ПРЕОБРАЗОВАТЬ(VARCHAR(10),@dt,5) s1,
CONVERT(VARCHAR(10),@dt,105) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот вывод:
Язык кода: SQL (язык структурированных запросов) (sql)
с1 с2 ---------- ---------- 31-12-19 31-12-2019 (затронут 1 ряд)
6) Преобразование даты и времени в строку в формате
dd mon yy
dd mon yyyy
пример форматов
DECLATE9021
-31 14:43:35,863'; ВЫБРАТЬ ПРЕОБРАЗОВАТЬ(VARCHAR(10), @dt, 6) s1, CONVERT(VARCHAR(10), @dt, 106) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 s2 ---------- ---------- 31 дек 19 31 дек 201 (затронут 1 ряд)
7) Преобразование даты и времени в строку в
Mon dd, yy
Mon dd, yyyy -12-31 14:43:35,863';
ВЫБЕРИТЕ ПРЕОБРАЗОВАТЬ (VARCHAR (10), @dt, 7) s1,
CONVERT(VARCHAR(10), @dt, 107) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот результат:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 s2 ---------- ---------- 31, 19 декабря 31, 20 декабря (затронут 1 ряд)
8) Преобразование даты и времени в строку в формате
чч:ми:сс
пример
Язык кода: SQL (язык структурированных запросов) (sql)
DECLARE @dt DATETIME= '2019-12-12 :43:35,863'; SELECT CONVERT(VARCHAR(10), @dt, 108) s1;
Вот результат:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 ---------- 14:43:35 (затронут 1 ряд)
9) Преобразование даты и времени в строку в формате
mon dd yyyy hh:mi:ss:mmmAM (или PM)
пример формата
Язык кода: SQL (язык структурированных запросов) (sql)
DE DATETIME= '2019-12-31 14:43:35.
863'; ВЫБРАТЬ CONVERT(VARCHAR(30), @dt, 109) s1;
Вот результат:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 ------------------------------ 31 декабря 2019 г., 14:43:35:863 (затронут 1 ряд)
10) Преобразование даты и времени в строку в формате
мм-дд-гг
и мм-дд-гггг
9000dt DECLARE TIME @ = '2019-12-31 14:43:35.863'; ВЫБЕРИТЕ ПРЕОБРАЗОВАТЬ (VARCHAR (10), @dt, 10) s1, CONVERT(VARCHAR(10), @dt, 110) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 s2 ---------- ---------- 31-12-19 31-12-2019 (затронут 1 ряд)
11) Преобразование даты и времени в строку в формате
гг/мм/дд
и гггг/мм/дд
= '2019-12-31 14:43:35. 863';
ВЫБЕРИТЕ ПРЕОБРАЗОВАТЬ (VARCHAR (10), @dt, 11) s1,
CONVERT(VARCHAR(10), @dt, 111) s2;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот набор результатов:
Code language: SQL (Structured Query Language) (sql)
s1 s2 ---------- ---------- 19/12/31 2019/12/31 (затронут 1 ряд)
12) Convert datetime to string in
yymmdd
and yyyymmdd
format example
Язык кода: SQL (язык структурированных запросов) (sql)
DECLARE @dt DATETIME= '2019-12-31 14 :43:35,863'; ВЫБЕРИТЕ ПРЕОБРАЗОВАТЬ (VARCHAR (10), @dt, 12) s1, CONVERT(VARCHAR(10), @dt, 112) s2;
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 s2 ---------- ---------- 191231 20191231 (затронут 1 ряд)
13) Преобразование даты и времени в строку в формате
dd mon yyyy hh:mi:ss:mmm(24h) = '2019-12-31 14:43:35.
863';
SELECT CONVERT(VARCHAR(10), @dt, 113) s1;
Язык кода: SQL (язык структурированных запросов) (sql)
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 ---------- 31 декабря 201 г. (затронут 1 ряд)
14) Преобразование даты и времени в строку в формате
hh:mi:ss:mmm(24h)
пример формата
Язык кода: SQL (язык структурированных запросов) (sql)
DECLARE @'dt2 DATETIME -12-31 14:43:35,863'; SELECT CONVERT(VARCHAR(20), @dt, 114) s1;
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 -------------------- 14:43:35:863 (затронут 1 ряд)
15) Преобразование даты и времени в строку в формате
гггг-мм-дд чч:ми:сс(24ч) Пример формата
Язык кода: SQL (язык структурированных запросов) (sql)
DATETIME @dt DECLARE @dt = '2019-12-31 14:43:35.
863'; SELECT CONVERT(VARCHAR(20), @dt, 120) s1;
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 -------------------- 2019-12-31 14:43:35 (затронут 1 ряд)
16) Преобразование даты и времени в строку в формате
гггг-мм-дд чч:ми:сс.ммм(24ч) Пример формата
Язык кода: SQL (язык структурированных запросов) (sql)
DECL @DECL dt DATETIME = '2019-12-31 14:43:35.863'; SELECT CONVERT(VARCHAR(30), @dt, 121) s1;
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 ------------------------------ 2019-12-31 14:43:35.
863 (затронут 1 ряд)
17) Преобразование даты и времени в строку в формате
yyyy-mm-ddThh:mi:ss.mmm
пример формата
Язык кода: SQL (язык структурированных запросов) (sql)
DATETIME='dt 2019-12-31 14:43:35.863'; SELECT CONVERT(VARCHAR(25), @dt, 126) s1;
Вот набор результатов:
Язык кода: SQL (язык структурированных запросов) (sql)
s1 ------------------------- 2019-12-31T14:43:35.863 (затронут 1 ряд)
18) Преобразование даты и времени в строку в формате
yyyy-mm-ddThh:mi:ss.
Without century (yy) | With century (yyyy) | Standard | Format | |
---|---|---|---|---|
– | 0 or 100 | Default for datetime and smalldatetime | mon dd гггг чч:миAM (или PM) | |
1 | 101 | U.S. | 1 = mm/dd/yy 101 = mm/dd/yyyy | |
2 | 102 | ANSI | 2 = yy.mm.dd 102 = yyyy.mm.dd | |
3 | 103 | British/French | 3 = DD/MM/YY 8 = = = = = 9028 = 9028 = 9028. ![]() | |
4 | 104 | German | 4 = dd.mm.yy 104 = dd.mm.yyyy | |
5 | 105 | Italian | 5 = dd-mm-yy 105 = dd-mm -yyyy | |
6 | 106 | – | 6 = dd mon yy 106 = dd mon yyyy | |
7 | 107 | – | 7 = Mon дд, гг 107 = пн дд, гггг | |
8 | 108 | – | hh:mi:ss | |
– | 9 or 109 | Default + milliseconds | mon dd yyyy hh:mi:ss :mmmAM (or PM) | |
10 | 110 | USA | 10 = mm-dd-yy 110 = mm-dd-yyyy | |
11 | 111 | ЯПОНИЯ | 11 = yy/mm/dd 111 = yyyy/mm/dd | |
12 | 112 | ISO | 12 = yymmdd 112 = yyyymmdd | |
– | 13 или 113 | Европа по умолчанию + миллисекунды | DD Mon Yyyy HH: MM: MMM (24H) | |
14 | ||||
140004 | ||||
.![]() | ||||
– | 20 or 120 | ODBC canonical | yyyy-mm-dd hh:mi:ss(24h) | |
– | 21 or 121 | ODBC canonical (with milliseconds) по умолчанию для времени, даты, datetime2 и datetimeoffset | гггг-мм-дд чч:ми:сс.ммм(24ч) | |
– | 126 | ISO8601 | -Th сс.ммм (без пробелов) | |
– | 127 | ISO8601 with time zone Z. | yyyy-mm-ddThh:mi:ss.mmmZ (no spaces) | |
– | 130 | Hijri | dd mon yyyy hh:mi : SS: MMMAM | |
- | 131 | HIJRI | DD/MM/YYYY HH: MI: SS: MMMAM |