Поделиться через


Функции 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

гггг-мм-ддТчч:мм:сс.ммм (без пробелов)

ПримечаниеПримечание

Если значение миллисекунд (ммм) равно 0, значение миллисекунд не отображается. Например, значение «2012-11-07T18:26:20.000» будет отображено как «2012-11-07T18:26:20».

-

127(6, 7)

ISO8601 с часовым поясом П.

гггг-мм-ддТчч:мм:сс.мммП (без пробелов)

ПримечаниеПримечание

Если значение миллисекунд (ммм) равно 0, значение миллисекунд не отображается. Например, значение «2012-11-07T18:26:20.000» будет отображено как «2012-11-07T18:26:20».

-

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 не разрешены.

ПримечаниеПримечание

При преобразовании к типу данных xml SQL Server обрабатывает незначащие пробельные символы не так, как это описано в стандарте XML 1.0. Дополнительные сведения см. в разделе Создание экземпляров XML-данных.

1

Сохранять незначащие пробельные символы. Это значение стиля приводит к тому, что обработка атрибута xml:space производится так же, как если бы было указано xml:space="preserve".

2

Использовать ограниченную обработку внутреннего подмножества DTD.

При этом для выполнения операций синтаксического анализа без проверки действительности сервер может пользоваться следующей информацией, предоставляемой внутренним подмножеством 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];

См. также

Справочник

SELECT (Transact-SQL)

Системные функции (Transact-SQL)

Основные понятия

Преобразование типов данных (компонент Database Engine)

Написание инструкций Transact-SQL, адаптированных к международному использованию