Функции CAST и CONVERT (Transact-SQL)
Преобразует выражение одного типа данных в другой в SQL Server 2012.
Синтаксические обозначения в Transact-SQL
Синтаксис
Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Аргументы
expression
Любое допустимое выражение.data_type
Целевой тип данных. К таким типам данных относятся xml, bigint и sql_variant. Псевдонимы типов данных недопустимы.length
Указываемое дополнительно целое число, обозначающее длину целевого типа данных. Значение по умолчанию — 30.style
Целочисленное выражение, определяющее, как функция CONVERT преобразует параметр expression. Если стиль имеет значение NULL, возвращается NULL. Диапазон определяется параметром data_type. Дополнительные сведения см. в разделе «Примечания».
Возвращаемые типы данных
Возвращает параметр expression, преобразованный в тип data_type.
Замечания
Стили даты и времени
Если параметр expression принадлежит к типу данных date или time, параметр style может иметь одно из значений, приведенных в следующей таблице. Другие значения обрабатываются как 0. Начиная с SQL Server 2012, преобразование с типов даты и времени в datetimeoffset поддерживается только для стилей 0 и 1. Все остальные стили преобразования возвращают ошибку 9809.
SQL Server поддерживает формат даты в арабском стиле, используя кувейтский алгоритм.
Без века (гг) (1) |
С веком (гггг) |
Standard Edition |
Ввод/вывод (3) |
||
---|---|---|---|---|---|
- |
0 или 100 (1, 2) |
По умолчанию для datetime и smalldatetime |
мес дд гггг чч:мм |
||
1 |
101 |
США |
1 = мм/дд/гг 101 = мм/дд/гггг |
||
2 |
102 |
ANSI |
2 = гг.мм.дд 102 = гггг.мм.дд |
||
3 |
103 |
Британский/французский |
3 = дд/мм/гг 103 = дд/мм/гггг |
||
4 |
104 |
Немецкий |
4 = дд.мм.гг 104 = дд.мм.гггг |
||
5 |
105 |
Итальянский язык |
5 = дд-мм-гг 105 = дд-мм-гггг |
||
6 |
106 (1) |
- |
6 = дд мес гг 106 = дд мм гггг |
||
7 |
107 (1) |
- |
7 = Мес дд, гг 107 = Мес дд, гггг |
||
8 |
108 |
- |
чч:мм:сс |
||
- |
9 или 109 (1, 2) |
По умолчанию + миллисекунды |
мес дд гггг чч:мм:сс:ммм |
||
10 |
110 |
США |
10 = мм-дд-гг 110 = мм-дд-гггг |
||
11 |
111 |
ЯПОНСКИЙ |
11 = гг/мм/дд 111 = гггг/мм/дд |
||
12 |
112 |
ISO |
12 = ггммдд 112 = ггггммдд |
||
- |
13 или 113 (1, 2) |
Европейский по умолчанию + миллисекунды |
дд мес гггг чч:мм:сс:ммм (24-часовой формат) |
||
14 |
114 |
- |
чч:мм:сс:ммм (24-часовой формат) |
||
- |
20 или 120 (2) |
Канонический формат ODBC |
гггг-мм-дд чч:мм:сс (24-часовой формат) |
||
- |
21 или 121 (2) |
Канонический формат ODBC (с миллисекундами) по умолчанию для time, date, datetime2 и datetimeoffset |
гггг-мм-дд чч:мм:сс.ммм (24-часовой формат) |
||
- |
126 (4) |
ISO8601 |
гггг-мм-ддТчч:мм:сс.ммм (без пробелов)
|
||
- |
127(6, 7) |
ISO8601 с часовым поясом П. |
гггг-мм-ддТчч:мм:сс.мммП (без пробелов)
|
||
- |
130 (1, 2) |
Хиджра (5) |
дд мес гггг чч:ми:сс:мммAM В этом стиле "мес" является представлением Юникода полного названия месяца в Хиджре. Это значение не будет правильно отображаться при установке SSMS языковой версии "Английский (США)" по умолчанию. |
||
- |
131 (2) |
Хиджра (5) |
дд/мм/гггг чч:ми:сс:мммAM |
1 Эти значения стилей возвращают недетерминированные результаты. Включают в себя все стили «гг» (без номера века) и часть стилей «гггг» (с номером века).
2 Значения по умолчанию (style 0 или 100, 9 или 109, 13 или 113, 20 или 120 и 21 или 121) всегда возвращают год с веком (гггг).
3 Вход при преобразовании в тип datetime; выход при преобразовании в символьные данные.
4 Для использования в формате XML. Для преобразования из datetime или smalldatetime в символьные данные формат вывода должен быть таким как это описано в предыдущей таблице.
5 Хиджра — календарная система с несколькими вариантами. В SQL Server используется кувейтский алгоритм.
Важно! |
---|
По умолчанию SQL Server интерпретирует двузначные значения года с пороговым значением 2049. Т.е. год, обозначенный двумя цифрами 49, интерпретируется как 2049, а год, обозначенный двумя цифрами 50, интерпретируется как 1950. В большинстве клиентских приложений, основанных, в частности, на объектах автоматизации, 2030 год используется в качестве порогового значения. В SQL Server используется параметр конфигурации two digit year cutoff , изменяющий пороговое значение года в SQL Server, для согласования работы с датами. Рекомендуется использовать четырехзначные года. |
6 Поддерживается только при приведении символьных данных к типу datetime или smalldatetime. При приведении символьных данных, представляющих только дату или только время, к типам datetime и smalldatetime неуказанное время устанавливается в 00:00:00.000, а неуказанная дата — в 1900-01-01.
7 Необязательный признак часового пояса П используется для упрощения сопоставления XML-значений типа datetime, содержащих сведения о часовом поясе, со значениями SQL Server типа datetime без таких сведений. П — это индикатор часового пояса UTC-0. Другие часовые пояса обозначаются смещением в формате ЧЧ:ММ в направлении + или -. Например: 2006-12-12T23:45:12-08:00.
При преобразовании в символьные данные из smalldatetime стили, включающие секунды или миллисекунды, будут содержать нули в соответствующих позициях. При преобразовании из datetime или smalldatetime ненужные части даты можно усекать с помощью типа данных char или varchar соответствующей длины.
При преобразовании в тип данных datetimeoffset из символьных данных со стилем, включающим время, смещение часового пояса добавляется к результату.
Стили данных типа float и real
Если expression равен float или real, то параметр style может иметь один из типов, перечисленных в следующей таблице. Другие значения обрабатываются как 0.
Значение |
Вывод |
---|---|
0 (по умолчанию) |
Не более 6 разрядов. По необходимости используется экспоненциальное представление чисел. |
1 |
Всегда 8 разрядов. Всегда используется экспоненциальное представление чисел. |
2 |
Всегда 16 разрядов. Всегда используется экспоненциальное представление чисел. |
126, 128, 129 |
Включено для совместимости с прежними версиями и может быть исключено в следующих версиях. |
Стили данных типа money и smallmoney
Если expression равен money или smallmoney, то параметр style может иметь один из типов, перечисленных в следующей таблице. Другие значения обрабатываются как 0.
Значение |
Вывод |
---|---|
0 (по умолчанию) |
Без запятых, разделяющих группы разрядов, с двумя цифрами справа от десятичного разделителя, например 4235,98. |
1 |
Запятые, разделяющие группы из трех разрядов слева от десятичной точки, с двумя цифрами справа от десятичного разделителя, например 3 510,92. |
2 |
Без запятых, разделяющих группы разрядов, с четырьмя цифрами справа от десятичного разделителя, например 4235,9819. |
126 |
Эквивалентно стилю 2 при преобразовании в char(n) или varchar(n) |
Стили данных типа XML
Если выражение expression имеет тип xml, style может принимать одно из значений, приведенных в следующей таблице. Другие значения обрабатываются как 0.
Значение |
Вывод |
||
---|---|---|---|
0 (по умолчанию) |
Использовать синтаксический разбор по умолчанию, при котором незначащие пробельные символы удаляются, а внутренние подмножества DTD не разрешены.
|
||
1 |
Сохранять незначащие пробельные символы. Это значение стиля приводит к тому, что обработка атрибута xml:space производится так же, как если бы было указано xml:space="preserve". |
||
2 |
Использовать ограниченную обработку внутреннего подмножества DTD. При этом для выполнения операций синтаксического анализа без проверки действительности сервер может пользоваться следующей информацией, предоставляемой внутренним подмножеством DTD.
Синтаксический анализатор будет пропускать внешние подмножества DTD. Он также не будет рассматривать XML-декларацию, чтобы проверить, присвоено ли атрибуту standalone значение yes или no, вместо этого экземпляр XML будет анализироваться как изолированный документ. |
||
3 |
Сохранять незначащие пробельные символы и использовать ограниченную обработку внутреннего подмножества DTD. |
Стили двоичных данных
Если параметр expression имеет значение binary(n), varbinary(n), char(n) или varchar(n), параметр style может принимать одно из значений, приведенных в следующей таблице. При использовании значений стиля, отсутствующих в этой таблице, возвращается ошибка.
Значение |
Вывод |
---|---|
0 (по умолчанию) |
Преобразует символы ASCII в двоичные байты либо двоичные байты в символы ASCII. Каждый символ или байт преобразуется в соотношении 1:1. Если параметр data_type имеет значение binary, к результату слева добавляются символы 0x. |
1, 2 |
Если параметр data_type имеет значение binary, выражение должно быть символьным. Значение параметра expression должно состоять из четного числа шестнадцатеричных знаков (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Если параметр style имеет значение 1, символы 0x должны быть первыми двумя символами в выражении. Если выражение содержит нечетное число символов или использованы недопустимые символы, возникает ошибка. Если длина преобразованного выражения превышает длину типа данных data_type, результат усекается справа. При использовании значений параметра data_types фиксированной длины, превышающей длину преобразованного результата, к результату справа добавляются нули. Если параметр data_type принадлежит к символьному типу, выражение должно быть двоичным. Каждый двоичный символ преобразуется в два шестнадцатеричных символа. Если длина преобразованного выражения превышает длину типа данных data_type, результат усекается справа. Если для параметра data_type используется значение символьного типа фиксированного размера и длина преобразованного результата меньше длины типа данных data_type, к преобразованному выражению справа добавляются символы пробела, чтобы сохранить четность числа шестнадцатеричных знаков. Символы 0x добавляются слева к преобразованному результату для параметра style, равного 1. |
Неявные преобразования
Неявные преобразования происходят, когда функции CAST или CONVERT не вызываются. Явные преобразования требуют вызова функции CAST или CONVERT. На следующей иллюстрации показаны все явные и неявные преобразования типов данных, допустимые для системных типов данных SQL Server. Сюда входят типы xml, bigint и sql_variant. При присваивании неявного преобразования от типа sql_variant не происходит, но неявное преобразование к типу sql_variant производится.
Совет |
---|
В центре загрузки Майкрософт эта диаграмма представлена в виде PDF-файла, который можно загрузить. |
При преобразованиях между типом datetimeoffset и символьными типами char, varchar, nchar и nvarchar преобразованная часть смещения часового пояса должна иметь по два разряда для часов и минут, например -08:00.
Примечание |
---|
Так как у данных в Юникоде всегда четное число байтов, будьте осторожны при преобразовании значений типа binary или varbinary к типам данных, поддерживающим Юникод, и наоборот. Например, следующее преобразование не вернет шестнадцатеричное значение 41, оно вернет 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary). |
Типы данных большого объема
Типы данных большого объема демонстрируют то же поведение при явных и неявных преобразованиях, что и их аналоги меньшего объема, а именно типы данных varchar, nvarchar и varbinary. Однако необходимо учитывать следующие правила:
преобразование из image в varbinary(max) и обратно неявное, как и преобразования между text и varchar(max) и ntext и nvarchar(max);
преобразование из типов данных большого объема, например varchar(max), в аналогичный тип данных меньшего объема, например varchar, неявное, но если объем данных слишком велик, будет произведено усечение данных до указанной длины конкретного типа данных меньшего объема;
преобразование из varchar, nvarchar или varbinary в соответствующие им типы данных большого объема выполняется неявно;
преобразование из типа данных sql_variant в типы данных большого объема выполняется явно.
Типы данных большого объема не могут быть преобразованы в тип данных sql_variant.
Дополнительные сведения о преобразовании из типа данных xml см. в разделе Создание экземпляров XML-данных.
Тип данных xml
При явном или неявном приведении типа данных xml к строковому или двоичному типу данных, содержимое типа данных xml сериализуется согласно набору определенных правил. Сведения об этих правилах см. в разделе Определение сериализации XML-данных. Сведения о преобразовании из других типов данных к типу данных xml см. в разделе Создание экземпляров XML-данных.
Типы данных text и image
Для типов данных text и image автоматическое преобразование типов не поддерживается. Можно явно преобразовать text в символьные данные, а image — в binary или varbinary, но длиной не более 8 000 байт. Если вы попробуете произвести неверное преобразование, например преобразовать символьное выражение, содержащее буквы, в int, SQL Server вернет ошибку.
Параметры сортировки выходных данных
Если входные и выходные данные функций CAST и CONVERT — символьные строки, у выходных данных будут те же параметры сортировки, что и у входных. Если входные данные не символьная строка, выходным назначаются параметры сортировки по умолчанию для этой базы данных и присваивается метка о том, что этот режим используется принудительно. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).
Чтобы назначить выходным данным другие параметры сортировки, примените предложение COLLATE к результирующему выражению функции CAST или CONVERT. Например:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
Усечение и округление результатов
При преобразовании символьных или двоичных выражений (char, nchar, nvarchar, varchar, binary или varbinary) к выражению другого типа данных данные могут быть усечены, отображаться только частично или вызывать ошибку, так как результат слишком мал для отображения. Результаты преобразований в char, varchar, nchar, nvarchar, binary и varbinary усекаются всегда, за исключением случаев, перечисленных в таблице ниже.
Из типа данных |
В тип данных |
Результат |
---|---|---|
int, smallint или tinyint |
char |
* |
|
varchar |
* |
|
nchar |
О |
|
nvarchar |
О |
money, smallmoney, numeric, decimal, float или real |
char |
О |
|
varchar |
О |
|
nchar |
О |
|
nvarchar |
О |
* = результат слишком мал для отображения. О = ошибка, так как длина результата слишком мала для отображения.
SQL Server гарантирует получение одинаковых результатов в разных версиях только для обратимых преобразований, то есть таких, когда данные преобразуются из исходного типа данных, а затем опять в него. В следующем примере показано обратимое преобразование:
DECLARE @myval decimal (5, 2);
SET @myval = 193.57;
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));
Примечание |
---|
Не пытайтесь составлять данные типа binary, а затем преобразовывать их в данные категории числового типа. SQL Server не гарантирует, что результат преобразования типа данных decimal или numeric в binary будет одинаковым в разных версиях SQL Server. |
В следующем примере показано результирующее выражение, которое слишком мало для отображения:
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS [Sick Leave]
FROM HumanResources.Employee e JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID >5;
Ниже приводится результирующий набор.
FirstName LastName Title Sick Leave
--------- ------------- ------- --------
Ken Sanchez NULL *
Terri Duffy NULL *
Roberto Tamburello NULL *
Rob Walters NULL *
Gail Erickson Ms. *
(5 row(s) affected)
При преобразовании между типами данных с разными длинами дробных частей результат может усекаться или округляться. В следующей таблице описано это поведение.
От |
В |
Режим работы |
---|---|---|
numeric |
numeric |
Round |
numeric |
int |
Усечение |
numeric |
money |
Round |
money |
int |
Round |
money |
numeric |
Round |
float |
int |
Усечение |
float |
numeric |
Round Точность преобразования значений float, которые используют экспоненциальное представление, к decimal или numeric ограничена только 17 знаками. Любое значение с точностью, превышающей 17 знаков, округляется до нуля. |
float |
datetime |
Round |
datetime |
int |
Round |
Например, результатом следующего преобразования будет 10:
SELECT CAST(10.6496 AS int);
При преобразовании к типам данных, у которых дробная часть короче, чем у исходного типа, значение округляется. Например, результатом следующего преобразования будет $10.3497:
SELECT CAST(10.3496847 AS money);
SQL Server возвращает сообщение об ошибке при попытке преобразовать нечисловые данные типа char, nchar, varchar или nvarchar в тип int, float, numeric или decimal. SQL Server также возвращает сообщение об ошибке при попытке преобразования пустой строки (" ") в тип numeric или decimal.
В SQL Server 2005 и более поздних версиях некоторые преобразования типа данных datetime являются недетерминированными.
В SQL Server 2000 преобразования строковых значений в значения date и time помечаются как детерминированные. Однако это неверно для стилей, перечисленных в следующей таблице. Для этих стилей преобразование зависит от языковых параметров. В SQL Server 2005 и более поздних версиях эти преобразования отмечаются как недетерминированные.
Следующая таблица содержит стили, для которых преобразование строк в тип datetime недетерминировано.
Все стили меньше 1001 |
106 |
107 |
109 |
113 |
130 |
1 За исключением стилей 20 и 21.
Дополнительные символы (суррогатные пары)
Начиная с SQL Server 2012, при использовании параметров сортировки дополнительных символов (SC), операция CAST из типа nchar или nvarchar в тип nchar с nvarchar с меньшей длиной не будет выполнять усечение внутри суррогатной пары; усечение происходит перед дополнительным символом. Например, выполнение следующего фрагмента кода приведет к тому, что в @x останется лишь 'ab'. Места недостаточно для размещения дополнительного символа.
DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);
SELECT CAST (@x AS NVARCHAR(3));
При использовании параметров сортировки SC поведение CONVERT аналогично CAST.
Поддержка совместимости
В предыдущих версиях SQL Server используемый по умолчанию стиль для операций CAST и CONVERT над типами данных time и datetime2 — 121, кроме случая, когда любой из типов используется в выражении вычисляемого столбца. Для вычисляемых столбцов используемый по умолчанию стиль — 0. Это поведение влияет на вычисляемые столбцы при их создании и использовании в запросах с автоматической параметризацией, а также при использовании в определениях ограничений.
При уровне совместимости 110 стиль по умолчанию для операций CAST и CONVERT над типами данных time и datetime2 всегда имеет значение 121. Если запрос основан на прежнем поведении, следует использовать уровень совместимости ниже 110, либо явно задать в затрагиваемом запросе стиль 0.
Обновление базы данных до уровня совместимости 110 не приведет к изменению пользовательских данных, сохраненных на диске. Следует исправить эти данных соответствующим образом вручную. Например, если бы вы использовали предложение SELECT INTO для создания таблицы на основе источника, содержащего описанное выше выражение вычисляемого столбца, то сохранялись бы данные (благодаря стилю 0), а не само определение вычисляемого столбца. Потребовалось бы вручную обновлять эти данные в соответствии со стилем 121.
Примеры
A.Использование функций CAST и CONVERT
В каждом примере получаются имена товаров, у которых первая цифра цены — 3. Их значения ListPrice преобразовываются в тип int.
-- Use CAST
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO
-- Use CONVERT.
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO
Б.Использование функции CAST с арифметическими операторами
В следующем примере вычисляется столбец значений (Computed) путем деления суммарных продаж за год (SalesYTD) на проценты комиссионных (CommissionPCT). Результат преобразуется к типу данных int после округления до ближайшего целого числа.
USE AdventureWorks2012;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS Computed
FROM Sales.SalesPerson
WHERE CommissionPCT != 0;
GO
Ниже приводится результирующий набор.
Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)
В.Использование функции CAST для объединения строк
В следующем примере несимвольные недвоичные выражения объединяются с помощью функции CAST.
USE AdventureWorks2012;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO
Ниже приводится результирующий набор.
ListPrice
------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09
(5 row(s) affected)
Г.Использование функции CAST для получения удобочитаемого текста
В следующем примере функция CAST используется для преобразования значений столбца Name к значениям типа char(10).
USE AdventureWorks2012;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail AS s
JOIN Production.Product AS p
ON s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO
Ниже приводится результирующий набор.
Name UnitPrice
---------- ---------------------
Long-Sleev 31.2437
Long-Sleev 32.4935
Long-Sleev 49.99
(3 row(s) affected)
Д.Использование функции CAST с предложением LIKE
В следующем примере столбец значений money типа SalesYTD преобразуется в тип int, а затем в тип char(20) так, чтобы его можно было использовать в предложении LIKE.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person AS p
JOIN Sales.SalesPerson AS s
ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO
Ниже приводится результирующий набор.
FirstName LastName SalesYTD SalesPersonID
---------------- ------------------- ---------------- -------------
Tsvi Reiter 2811012.7151 279
Syed Abbas 219088.8836 288
Rachel Valdez 2241204.0424 289
(3 row(s) affected)
Е.Использование функции CONVERT или CAST с типизированным XML
В следующих нескольких примерах показано использование функции CONVERT для преобразования данных в типизированный XML-код при помощи Столбцы и типы XML-данных (SQL Server).
В этом примере строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором удаляются все незначащие пробельные символы (пробелы, разделяющие узлы):
CONVERT(XML, '<root><child/></root>')
В этом примере похожая строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором сохраняются все незначащие пробельные символы (пробелы, разделяющие узлы):
CONVERT(XML, '<root> <child/> </root>', 1)
В этом примере строка, содержащая пробельные символы, текст и разметку, приводится к типизированному XML:
CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>' AS XML)
Дополнительные примеры см. в разделе Создание экземпляров XML-данных.
Ж.Использование функций CAST и CONVERT с данными типа datetime
Следующий пример показывает текущую дату и время, использует функцию CAST для изменения текущей даты и времени в символьный тип данных и затем использует CONVERT для отображения даты и времени в формате ISO 8901.
SELECT
GETDATE() AS UnconvertedDateTime,
CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
Ниже приводится результирующий набор.
UnconvertedDateTime UsingCast UsingConvertTo_ISO8601
----------------------- ------------------------------ ------------------------------
2006-04-18 09:58:04.570 Apr 18 2006 9:58AM 2006-04-18T09:58:04.570
(1 row(s) affected)
Следующий пример — частичная противоположность предыдущему примеру. Пример отображает дату и время в виде символьных данных, использует функцию CAST для изменения символьных данных в тип данных datetime, а затем использует CONVERT для изменения символьных данных в тип данных datetime.
SELECT
'2006-04-25T15:50:59.997' AS UnconvertedText,
CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO
Ниже приводится результирующий набор.
UnconvertedText UsingCast UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997
(1 row(s) affected)
З.Использование функции CONVERT с двоичными и символьными данными
В следующих примерах показаны результаты преобразования двоичных и символьных данных с использованием различных стилей.
--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];
Ниже приводится результирующий набор.
Style 0, binary to character
----------------------------
Name
(1 row(s) affected)
--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];
Ниже приводится результирующий набор.
Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)
--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];
Ниже приводится результирующий набор.
Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)
--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];
Ниже приводится результирующий набор.
Style 0, character to binary
----------------------------------
0x4E616D6500000000
(1 row(s) affected)
SELECT CONVERT(binary(4), '0x4E616D65', 1) AS [Style 1, character to binary];
Ниже приводится результирующий набор.
Style 1, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)
SELECT CONVERT(binary(4), '4E616D65', 2) AS [Style 2, character to binary];
Ниже приводится результирующий набор.
Style 2, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)
И.Преобразование типов данных даты и времени
В следующем примере показано преобразование типов данных date, time и datetime data types.
DECLARE @d1 date, @t1 time, @dt1 datetime;
SET @d1 = GETDATE();
SET @t1 = GETDATE();
SET @dt1 = GETDATE();
SET @d1 = GETDATE();
-- When converting date to datetime the minutes portion becomes zero.
SELECT @d1 AS [date], CAST (@d1 AS datetime) AS [date as datetime];
-- When converting time to datetime the date portion becomes zero
-- which converts to January 1, 1900.
SELECT @t1 AS [time], CAST (@t1 AS datetime) AS [time as datetime];
-- When converting datetime to date or time non-applicable portion is dropped.
SELECT @dt1 AS [datetime], CAST (@dt1 AS date) AS [datetime as date], CAST (@dt1 AS time) AS [datetime as time];
См. также
Справочник
Системные функции (Transact-SQL)
Основные понятия
Преобразование типов данных (компонент Database Engine)
Написание инструкций Transact-SQL, адаптированных к международному использованию