Функции CAST и CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Эти функции преобразуют выражение одного типа данных в другой.These functions convert an expression of one data type to another.

СинтаксисSyntax

-- CAST Syntax:  
CAST ( expression AS data_type [ ( length ) ] )  
  
-- CONVERT Syntax:  
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

АргументыArguments

expressionexpression
Любое допустимое выражение.Any valid expression.

data_typedata_type
Целевой тип данных.The target data type. Это может быть xml, bigint и sql_variant.This includes xml, bigint, and sql_variant. Псевдонимы типов данных недопустимы.Alias data types cannot be used.

lengthlength
Указываемое дополнительно целое число, обозначающее длину целевого типа данных, который допускает указание длины пользователем.An optional integer that specifies the length of the target data type, for data types that allow a user specified length. Значение по умолчанию — 30.The default value is 30.

stylestyle
Целочисленное выражение, определяющее, как функция CONVERT преобразует значение аргумента expression.An integer expression that specifies how the CONVERT function will translate expression. Для значения стиля NULL возвращается NULL.For a style value of NULL, NULL is returned. Аргумент data_type определяет диапазон.data_type determines the range.

Типы возвращаемых данныхReturn types

Возвращает значение аргумента expression, преобразованное в тип data_type.Returns expression, translated to data_type.

Стили даты и времениDate and Time styles

Если аргумент expression принадлежит к типу данных даты или времени, аргумент style может иметь одно из значений, приведенных в таблице ниже.For a date or time data type expression, style can have one of the values shown in the following table. Другие значения обрабатываются как 0.Other values are processed as 0. Начиная с SQL Server 2012 (11.x)SQL Server 2012 (11.x), преобразование типов даты и времени в datetimeoffset поддерживается только для стилей 0 и 1.Beginning with SQL Server 2012 (11.x)SQL Server 2012 (11.x), the only styles supported, when converting from date and time types to datetimeoffset, are 0 or 1. Все другие стили преобразования возвращают ошибку 9809.All other conversion styles return error 9809.

Примечание

SQL ServerSQL Server поддерживает формат даты в арабском стиле, используя кувейтский алгоритм.supports the date format, in Arabic style, with the Kuwaiti algorithm.

Без века (гг) (1)Without century (yy) (1) С веком (гггг)With century (yyyy) StandardStandard Ввод/вывод (3)Input/Output (3)
- 0 или 100 (1,2)0 or 100 (1,2) Значение по умолчанию для типа данных datetime и smalldatetimeDefault for datetime and smalldatetime мес дд гггг чч:ммmon dd yyyy hh:miAM (or PM)
11 101101 СШАU.S. 1 = мм/дд/гг1 = mm/dd/yy
101 = мм/дд/гггг101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = гг.мм.дд2 = yy.mm.dd
102 = гггг.мм.дд102 = yyyy.mm.dd
33 103103 Британский/французскийBritish/French 3 = дд/мм/гг3 = dd/mm/yy
103 = дд/мм/гггг103 = dd/mm/yyyy
44 104104 НемецкийGerman 4 = дд.мм.гг4 = dd.mm.yy
104 = дд.мм.гггг104 = dd.mm.yyyy
55 105105 ИтальянскийItalian 5 = дд-мм-гг5 = dd-mm-yy
105 = дд-мм-гггг105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = дд мес гг6 = dd mon yy
106 = дд мм гггг106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Мес дд, гг7 = Mon dd, yy
107 = Мес дд, гггг107 = Mon dd, yyyy
8 или 248 or 24 108108 - чч:мм:ссhh:mi:ss
- 9 или 109 (1,2)9 or 109 (1,2) По умолчанию + миллисекундыDefault + milliseconds мес дд гггг чч:мм:сс:мммmon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 СШАUSA 10 = мм-дд-гг10 = mm-dd-yy
110 = мм-дд-гггг110 = mm-dd-yyyy
1111 111111 ЯпонияJAPAN 11 = гг/мм/дд11 = yy/mm/dd
111 = гггг/мм/дд111 = yyyy/mm/dd
1212 112112 ISOISO 12 = ггммдд12 = yymmdd
112 = ггггммдд112 = yyyymmdd
- 13 или 113 (1,2)13 or 113 (1,2) Европейский по умолчанию + миллисекундыEurope default + milliseconds дд мес гггг чч:мм:сс:ммм (24-часовой формат)dd mon yyyy hh:mi:ss:mmm (24h)
1414 114114 - чч:мм:сс:ммм (24-часовой формат)hh:mi:ss:mmm (24h)
- 20 или 120 (2)20 or 120 (2) Канонический формат ODBCODBC canonical гггг-мм-дд чч:мм:сс (24-часовой формат)yyyy-mm-dd hh:mi:ss (24h)
- 21 или 25 или 121 (2)21 or 25 or 121 (2) Каноническая форма ODBC (с миллисекундами) является значением по умолчанию для времени, даты, datetime2, и datetimeoffsetODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset гггг-мм-дд чч:мм:сс.ммм (24-часовой формат)yyyy-mm-dd hh:mi:ss.mmm (24h)
2222 - СШАU.S. мм/дд/гг чч:мм:сс AM (или PM)mm/dd/yy hh:mi:ss AM (or PM)
- 2323 ISO8601ISO8601 гггг-мм-ддyyyy-mm-dd
- 126 (4)126 (4) ISO8601ISO8601 гггг-мм-ддТчч:мм:сс.ммм (без пробелов)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Примечание. Для равного 0 значения миллисекунд (ммм) значение десятичной части не отображается.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Например, значение "2012-11-07T18:26:20.000" отображается как "2012-11-07T18:26:20".For example, the value '2012-11-07T18:26:20.000 displays as '2012-11-07T18:26:20'.
- 127(6, 7)127(6, 7) ISO8601 с часовым поясом П.ISO8601 with time zone Z. гггг-мм-ддТчч:мм:сс.мммП (без пробелов)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Примечание. Для равного 0 значения миллисекунд (ммм) значение десятичной части не отображается.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Например, значение "2012-11-07T18:26:20.000" будет отображаться как "2012-11-07T18:26:20".For example, the value '2012-11-07T18:26:20.000 will display as '2012-11-07T18:26:20'.
- 130 (1,2)130 (1,2) Хиджра (5)Hijri (5) дд мес гггг чч:ми:сс:мммAMdd mon yyyy hh:mi:ss:mmmAM

В этом стиле мес является представлением Юникода полного названия месяца в Хиджре.In this style, mon represents a multi-token Hijri unicode representation of the full month name. Это значение не отображается правильно при установке SSMS языковой версии "Английский (США)" по умолчанию.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Хиджра (5)Hijri (5) дд/мм/гггг чч:ми:сс:мммAMdd/mm/yyyy hh:mi:ss:mmmAM

1 Эти значения стилей возвращают недетерминированные результаты.1 These style values return nondeterministic results. Включают в себя все стили "гг" (без номера века) и часть стилей "гггг" (с номером века).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 Значения по умолчанию (0 или 100, 9 или 109, 13 или 113, 20 или 120, 23 и 21 или 25 или 121) всегда возвращают год с веком (гггг).2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, 23, and 21 or 25 or 121) always return the century (yyyy).

3 Вход при преобразовании в тип datetime; выход при преобразовании в символьные данные.3 Input when you convert to datetime; output when you convert to character data.

4 Для использования в формате XML.4 Designed for XML use. Для преобразования из datetime или smalldatetime в символьные данные формат вывода должен быть таким, как описано в предыдущей таблице.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Хиджра — календарная система с несколькими вариантами.5 Hijri is a calendar system with several variations. В SQL ServerSQL Server используется кувейтский алгоритм.SQL ServerSQL Server uses the Kuwaiti algorithm.

Важно!

По умолчанию SQL ServerSQL Server интерпретирует двузначные значения года с пороговым значением 2049.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Это означает, что SQL ServerSQL Server интерпретирует двухзначное значение года 49 как 2049, а двухзначное значение 50 — как 1950.That means that SQL ServerSQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. В большинстве клиентских приложений, основанных, в частности, на объектах автоматизации, 2030  год используется в качестве порогового значения.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server предоставляет параметр настройки двузначного порогового значения года, с помощью которого можно изменить пороговое значение года, используемое в SQL ServerSQL Server.provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Это позволяет обеспечить согласованную обработку дат.This allows for the consistent treatment of dates. Рекомендуется использовать четырехзначные года.We recommend specifying four-digit years.

6 Поддерживается только при приведении символьных данных к типу datetime или smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. При приведении символьных данных, представляющих только дату или только время, к типам datetime и smalldatetime неуказанное время устанавливается в 00:00:00.000, а неуказанная дата — в 1900-01-01.When casting character data representing only date or only time components to the datetime or smalldatetime data types, the unspecified time component is set to 00:00:00.000, and the unspecified date component is set to 1900-01-01.

7 Необязательный признак часового пояса П используется для упрощения сопоставления XML-значений типа datetime, содержащих сведения о часовом поясе, со значениями SQL ServerSQL Server типа datetime без таких сведений.7 Use the optional time zone indicator Z to make it easier to map XML datetime values that have time zone information to SQL ServerSQL Server datetime values that have no time zone. Признак П указывает на часовой пояс UTC-0.Z indicates time zone UTC-0. Другие часовые пояса обозначаются смещением в формате ЧЧ:ММ в направлении + или –.The HH:MM offset, in the + or - direction, indicates other time zones. Например: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

При преобразовании в символьные данные из smalldatetime стили, включающие секунды или миллисекунды, будут содержать нули в соответствующих позициях.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. При преобразовании из datetime или smalldatetime ненужные части даты можно усекать с помощью типа данных char или varchar соответствующей длины.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

При преобразовании в тип данных datetimeoffset из символьных данных со стилем, включающим время, смещение часового пояса добавляется к результату.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

Стили данных float и realfloat and real styles

Если аргумент expression принадлежит к типу данных float или real, аргумент style может иметь одно из значений, приведенных в таблице ниже.For a float or real expression, style can have one of the values shown in the following table. Другие значения обрабатываются как 0.Other values are processed as 0.

ЗначениеValue Выходные данныеOutput
0 (по умолчанию)0 (default) Не более 6 разрядов.A maximum of 6 digits. По необходимости используется экспоненциальное представление чисел.Use in scientific notation, when appropriate.
11 Всегда 8 разрядов.Always 8 digits. Всегда используется экспоненциальное представление чисел.Always use in scientific notation.
22 Всегда 16 разрядов.Always 16 digits. Всегда используется экспоненциальное представление чисел.Always use in scientific notation.
33 Всегда 17 разрядов.Always 17 digits. Используется для преобразования без потери данных.Use for lossless conversion. При использовании этого стиля каждое отдельное значение типа float или real гарантированно преобразуется в отдельную строку символов.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

Применимо к: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x)) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting in SQL Server 2016 (13.x);SQL Server 2016 (13.x)) and База данных SQL AzureAzure SQL Database.
126, 128, 129126, 128, 129 Включено для совместимости с прежними версиями. В следующих версиях эти значения могут быть исключены.Included for legacy reasons; a future release could deprecate these values.

Стили данных money и smallmoneymoney and smallmoney styles

Если аргумент expression принадлежит к типу данных money или smallmoney, аргумент style может иметь одно из значений, приведенных в таблице ниже.For a money or smallmoney expression, style can have one of the values shown in the following table. Другие значения обрабатываются как 0.Other values are processed as 0.

ЗначениеValue Выходные данныеOutput
0 (по умолчанию)0 (default) Без запятых, разделяющих группы разрядов, с двумя цифрами справа от десятичного разделителя.No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Пример 4235.98.Example: 4235.98.
11 Запятые, разделяющие группы из трех разрядов слева от десятичного разделителя, с двумя цифрами справа от десятичного разделителя.Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Пример 3,510.92.Example: 3,510.92.
22 Без запятых, разделяющих группы разрядов, с четырьмя цифрами справа от десятичного разделителя.No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Пример 4235.9819.Example: 4235.9819.
126126 Эквивалентно стилю 2 при преобразовании в char(n) или varchar(n)Equivalent to style 2, when converting to char(n) or varchar(n)

Стили данных XMLxml styles

Если аргумент expression принадлежит к типу данных xml, аргумент style может иметь одно из значений, приведенных в таблице ниже.For an xml expression, style can have one of the values shown in the following table. Другие значения обрабатываются как 0.Other values are processed as 0.

ЗначениеValue Выходные данныеOutput
0 (по умолчанию)0 (default) Использовать синтаксический разбор по умолчанию, при котором незначащие пробельные символы удаляются, а внутренние подмножества DTD не разрешены.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Примечание. При преобразовании в тип данных xmlSQL ServerSQL Server обрабатывает незначащие пробелы не так, как это описано в стандарте XML 1.0.Note: When converting to the xml data type, SQL ServerSQL Server insignificant white space is handled differently than in XML 1.0. Дополнительные сведения см. в статье Создание экземпляров XML-данных.For more information, see Create Instances of XML Data.
11 Сохранять незначащие пробельные символы.Preserve insignificant white space. Этот параметр стиля задает обработку xml:space по умолчанию в соответствии с поведением xml:space="preserve" .This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Использовать ограниченную обработку внутреннего подмножества DTD.Enable limited internal DTD subset processing.

При этом для выполнения операций синтаксического анализа без проверки действительности сервер может пользоваться следующей информацией, предоставляемой внутренним подмножеством DTD.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

— Применяются атрибуты по умолчанию.- Defaults for attributes are applied
— Ссылки на внутренние сущности разрешаются и раскрываются.- Internal entity references are resolved and expanded
— Проверяется синтаксическая правильность модели содержимого DTD.- The DTD content model is checked for syntactical correctness

Синтаксический анализатор пропускает внешние подмножества DTD.The parser ignores external DTD subsets. Также не выполняется оценка объявления XML, чтобы определить, имеет ли атрибут standalone значение yes или no.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. Вместо этого выполняется анализ экземпляра XML как отдельного документа.Instead, it parses the XML instance as a stand-alone document.
33 Сохранять незначащие пробельные символы и использовать ограниченную обработку внутреннего подмножества DTD.Preserve insignificant white space, and enable limited internal DTD subset processing.

Стили двоичных данныхBinary styles

Если аргумент expression принадлежит к типу данных binary(n) , char(n) , varbinary(n) или varchar(n) , аргумент style может иметь одно из значений, приведенных в таблице ниже.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. При использовании значений стиля, отсутствующих в этой таблице, возвращается ошибка.Style values not listed in the table will return an error.

ЗначениеValue Выходные данныеOutput
0 (по умолчанию)0 (default) Преобразует символы ASCII в двоичные байты либо двоичные байты в символы ASCII.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Каждый символ или байт преобразуется в соотношении 1:1.Each character or byte is converted 1:1.

Если параметр data_type имеет значение binary, к результату слева добавляются символы 0x.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Если параметр data_type имеет значение binary, выражение должно быть символьным.For a binary data_type, the expression must be a character expression. Значение аргумента expression должно состоять из четного числа шестнадцатеричных знаков (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f).The expression must have an even number of hexadecimal digits (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.If the style is set to 1, the expression must have 0x as the first two characters. Если выражение содержит нечетное число символов или использованы недопустимые символы, возникает ошибка.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Если длина преобразованного выражения превышает длину типа данных data_type, результат усекается справа.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

При использовании значений аргумента data_type фиксированной длины, превышающей длину преобразованного результата, к результату справа добавляются нули.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Аргумент data_type символьного типа требует двоичного выражения.A data_type of type character requires a binary expression. Каждый двоичный символ преобразуется в два шестнадцатеричных символа.Each binary character is converted into two hexadecimal characters. Если длина преобразованного выражения превышает длину типа данных data_type, результат усекается справа.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

Если для параметра data_type используется значение символьного типа фиксированного размера и длина преобразованного результата меньше длины типа данных data_type, к преобразованному выражению справа добавляются символы пробела, чтобы сохранить четность числа шестнадцатеричных знаков.For a fixed size character type data_type, if the length of the converted result is less than its length of the data_type, spaces are added to the right of the converted expression, to maintain an even number of hexadecimal digits.

Символы 0x добавляются слева к преобразованному результату для параметра style, равному 2.The characters 0x will be added to the left of the converted result for style 2.

Неявные преобразованияImplicit conversions

Для неявных преобразований не требуется указывать функции CAST или CONVERT.Implicit conversions do not require specification of either the CAST function or the CONVERT function. Для явных преобразований указывать функции CAST или CONVERT необходимо.Explicit conversions require specification of the CAST function or the CONVERT function. На следующей иллюстрации показаны все явные и неявные преобразования типов данных, допустимые для системных типов данных SQL ServerSQL Server.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Это могут быть типы bigint, sql_variant и xml.These include bigint, and sql_variant, and xml. При присваивании неявного преобразования из типа sql_variant не происходит, но неявное преобразование в тип sql_variant производится.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Совет

В Центре загрузки Майкрософт эта диаграмма представлена в виде PNG-файла, который можно скачать.The Microsoft Download Center has this chart available for download as a PNG file.

Таблица преобразования типов данныхData type conversion table

На приведенной выше диаграмме показаны все явные и неявные преобразования, которые допускаются в SQL ServerSQL Server, однако результирующий тип данных преобразования зависит от выполняемой операции.The above chart illustrates all the explicit and implicit conversions that are allowed in SQL ServerSQL Server, but the resulting data type of the conversion depends on the operation being performed:

  • При явных преобразованиях сам оператор определяет результирующий тип данных.For explicit conversions, the statement itself determines the resulting data type.
  • При неявных преобразованиях операторы назначения, такие как установка значения переменной или вставка значения в столбец, дают в результате тип данных, определенный в объявлении переменной или в определении столбца.For implicit conversions, assignment statements such as setting the value of a variable or inserting a value into a column will result in the data type that was defined by the variable declaration or column definition.
  • Для операторов сравнения или других выражений результирующий тип данных зависит от правил приоритета типов данных.For comparison operators or other expressions, the resulting data type will depend on the rules of data type precedence.

Совет

Практический пример применения приоритета типов данных при преобразованиях приводится далее в этом разделе.A practical example on the effects of data type precedence in conversions can be seen later in this section.

При преобразованиях между типом datetimeoffset и символьными типами char, nchar, nvarchar и varchar преобразованная часть смещения часового пояса должна иметь по два разряда для часов и минут.When you convert between datetimeoffset and the character types char, nchar, nvarchar, and varchar, the converted time zone offset part should always have double digits for both HH and MM. Пример: -08:00.For example, -08:00.

Примечание

Так как у данных в Юникоде всегда четное число байтов, будьте осторожны при преобразовании значений типа binary или varbinary в типы данных, поддерживающие Юникод, и наоборот.Because Unicode data always uses an even number of bytes, use caution when you convert binary or varbinary to or from Unicode supported data types. Например, при следующем преобразовании не будет возвращено шестнадцатеричное значение 41.For example, the following conversion does not return a hexadecimal value of 41. В данном случае будет получено шестнадцатеричное значение 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary). Дополнительные сведения см. в статье Collation and Unicode Support.For more information, see Collation and Unicode Support.

Типы данных больших значенийLarge-value data types

Типы данных большого объема демонстрируют то же поведение при явных и неявных преобразованиях, что и их аналоги меньшего объема, а именно типы данных nvarchar, varbinary и varchar.Large-value data types have the same implicit and explicit conversion behavior as their smaller counterparts - specifically, the nvarchar, varbinary, and varchar data types. Тем не менее необходимо учитывать следующие правила:However, consider the following guidelines:

  • Преобразование из image в varbinary(max) и обратно неявное, как и преобразования между text и varchar(max) , а также ntext и nvarchar(max) .Conversion from image to varbinary(max), and vice-versa, operates as an implicit conversion, as do conversions between text and varchar(max), and ntext and nvarchar(max).
  • Преобразование из типов данных большого объема, например varchar(max) , в аналогичный тип данных меньшего объема, например varchar, неявное, но если объем данных слишком велик, будет произведено усечение данных до указанной длины конкретного типа данных меньшего объема.Conversion from large-value data types, such as varchar(max), to a smaller counterpart data type, such as varchar, is an implicit conversion, but truncation occurs if the size of the large value exceeds the specified length of the smaller data type.
  • Преобразование из nvarchar, varbinary или varchar в соответствующие им типы данных большого объема выполняется неявно.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • Преобразование из типа данных sql_variant в типы данных большого объема выполняется явно.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Типы данных большого объема не могут быть преобразованы в тип данных sql_variant.Large-value data types cannot be converted to the sql_variant data type.

Дополнительные сведения о преобразовании из типа данных xml см. в разделе Создание экземпляров XML-данных.For more information about conversion from the xml data type, see Create Instances of XML Data.

Тип данных XMLxml data type

При явном или неявном приведении типа данных xml к строковому или двоичному типу данных содержимое типа данных xml сериализуется согласно набору определенных правил.When you explicitly or implicitly cast the xml data type to a string or binary data type, the content of the xml data type is serialized based on a defined set of rules. Сведения об этих правилах см. в разделе Определение сериализации XML-данных.For information about these rules, see Define the Serialization of XML Data. Дополнительные сведения о преобразовании других типов данных в тип данных xml см. в разделе Создание экземпляров XML-данных.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

Типы данных text и imagetext and image data types

Для типов данных text и image автоматическое преобразование типов не поддерживается.The text and image data types do not support automatic data type conversion. Можно явно преобразовать text в символьные данные, а image — в binary или varbinary, но длиной не более 8000 байт.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. Если вы попробуете произвести неверное преобразование, например преобразовать символьное выражение, содержащее буквы, в int, SQL ServerSQL Server вернет ошибку.If you try an incorrect conversion, for example trying to convert a character expression that includes letters to an int, SQL ServerSQL Server returns an error message.

Параметры сортировки выходных данныхOutput Collation

Если входные и выходные данные функций CAST и CONVERT представляют собой символьные строки, у выходных данных будут те же параметры сортировки, что и у входных.When the CAST or CONVERT functions output a character string, and they receive a character string input, the output has the same collation and collation label as the input. Если входные данные не символьная строка, выходным назначаются параметры сортировки по умолчанию для этой базы данных и присваивается метка о том, что этот режим используется принудительно.If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. Дополнительные сведения см. в статье Очередность параметров сортировки (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Чтобы назначить выходным данным другие параметры сортировки, примените предложение COLLATE к результирующему выражению функции CAST или CONVERT.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Пример:For example:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

Усечение и округление результатовTruncating and rounding results

При преобразовании символьных или двоичных выражений (binary, char, nchar, nvarchar, varbinary или varchar) в выражение другого типа данных операция преобразования может усекать выходные данные, отображать их лишь частично или возвращать ошибку.When converting character or binary expressions (binary, char, nchar, nvarchar, varbinary, or varchar) to an expression of a different data type, the conversion operation could truncate the output data, only partially display the output data, or return an error. Это происходит в тех случаях, когда результат имеет слишком малую длину для отображения.These cases will occur if the result is too short to display. Результаты преобразований в binary, char, nchar, nvarchar, varbinary или varchar усекаются всегда, за исключением случаев, перечисленных в таблице ниже.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

Из типа данныхFrom data type В тип данныхTo data type РезультатResult
int, smallint или tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float или realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = результат слишком мал для отображения.* = Result length too short to display

О = ошибка, так как длина результата слишком мала для отображения.E = Error returned because result length is too short to display.

SQL ServerSQL Server гарантирует получение одинаковых результатов в разных версиях только для обратимых преобразований, то есть таких, когда данные преобразуются из исходного типа данных, а затем опять в него.guarantees that only roundtrip conversions, in other words conversions that convert a data type from its original data type and back again, yield the same values from version to version. В следующем примере показано обратимое преобразование:The following example shows such a roundtrip conversion:

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, а затем преобразовывать их в данные категории числового типа.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server не гарантирует, что результат преобразования типа данных decimal или numeric в binary будет одинаковым в разных версиях SQL ServerSQL Server.does not guarantee that the result of a decimal or numeric data type conversion, to binary, will be the same between versions of SQL ServerSQL Server.

В следующем примере показано результирующее выражение, которое слишком мало для отображения:The following example shows a resulting expression that is too small to display.

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;  

Результирующий набор:Here is the result set.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *

(5 row(s) affected)  

При преобразовании между типами данных с разными длинами дробных частей SQL ServerSQL Server может усекать или округлять результат.When you convert data types that differ in decimal places, SQL ServerSQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. В следующей таблице описано это поведение.This table shows the behavior.

ОтFrom ЧтобыTo ПоведениеBehavior
numericnumeric numericnumeric RoundRound
numericnumeric intint TruncateTruncate
numericnumeric moneymoney RoundRound
moneymoney intint RoundRound
moneymoney numericnumeric RoundRound
floatfloat intint TruncateTruncate
floatfloat numericnumeric RoundRound

Точность преобразования значений float, которые используют экспоненциальное представление, в decimal или numeric ограничена только 17 знаками.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Любое значение с точностью, превышающей 17 знаков, округляется до нуля.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime RoundRound
datetimedatetime intint RoundRound

Например, значения 10,6496 и –10,6496 могут усекаться или округляться при преобразовании в тип int или numeric:For example, the values 10.6496 and -10.6496 may be truncated or rounded during conversion to int or numeric types:

SELECT  CAST(10.6496 AS INT) as trunc1,
        CAST(-10.6496 AS INT) as trunc2,
        CAST(10.6496 AS NUMERIC) as round1,
        CAST(-10.6496 AS NUMERIC) as round2;

Результаты запроса показаны в приведенной ниже таблице.Results of the query are shown in the following table:

trunc1trunc1 trunc2trunc2 round1round1 round2round2
1010 –10-10 1111 -11-11

При преобразовании к типам данных, у которых дробная часть короче, чем у исходного типа, значение округляется.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Например, это преобразование возвращает $10.3497:For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server возвращает сообщение об ошибке при попытке преобразовать нечисловые данные типа char, nchar, nvarchar или varchar в тип decimal, float, int или numeric.returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server также возвращает сообщение об ошибке при попытке преобразования пустой строки (" ") в тип numeric или decimal.also returns an error when an empty string (" ") is converted to numeric or decimal.

Некоторые преобразования типа данных даты и времени являются недетерминированнымиCertain datetime conversions are nondeterministic

В следующих стилях преобразование строк в тип datetime недетерминировано:The styles for which the string-to-datetime conversion is nondeterministic are as follows:

  • Все стили меньше 1001All styles below 1001
  • 106106
  • 107107
  • 109109
  • 113113
  • 130130

1 За исключением стилей 20 и 21.1 With the exception of styles 20 and 21

Дополнительные сведения см. в статье Недетерминированное преобразование строк дат литералов в значения DATE.For more information, see Nondeterministic conversion of literal date strings into DATE values.

Дополнительные символы (суррогатные пары)Supplementary characters (surrogate pairs)

Начиная с SQL Server 2012 (11.x)SQL Server 2012 (11.x) при использовании параметров сортировки дополнительных символов (SC) операция CAST из типа nchar или nvarchar в тип nchar или nvarchar с меньшей длиной не будет выполнять усечение внутри суррогатной пары.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), when using supplementary character (SC) collations, a CAST operation from nchar or nvarchar to an nchar or nvarchar type of smaller length will not truncate inside a surrogate pair. Вместо этого усечение происходит перед дополнительным символом.Instead, the operation truncates before the supplementary character. Например, выполнение следующего фрагмента кода приведет к тому, что в @x останется лишь 'ab'.For example, the following code fragment leaves @x holding just 'ab'. Места недостаточно для размещения дополнительного символа.There is not enough space to hold the supplementary character.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);  
SELECT CAST (@x AS NVARCHAR(3));  

При использовании параметров сортировки SC поведение CONVERT аналогично CAST.When using SC collations, the behavior of CONVERT, is analogous to that of CAST. Дополнительные сведения см. в статье Поддержка параметров сортировки и Юникода — дополнительные символы.For more information, see Collation and Unicode Support - Supplementary Characters.

Поддержка совместимостиCompatibility support

В предыдущих версиях SQL ServerSQL Server используемый по умолчанию стиль для операций CAST и CONVERT с типами данных time и datetime2 — 121, кроме случая, когда любой из типов используется в выражении вычисляемого столбца.In earlier versions of SQL ServerSQL Server, the default style for CAST and CONVERT operations on time and datetime2 data types is 121, except when either type is used in a computed column expression. Для вычисляемых столбцов используемый по умолчанию стиль — 0.For computed columns, the default style is 0. Это поведение влияет на вычисляемые столбцы при их создании и использовании в запросах с автоматической параметризацией, а также при использовании в определениях ограничений.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

При уровне совместимости 110 и выше стиль по умолчанию для операций CAST и CONVERT с типами данных time и datetime2 всегда имеет значение 121.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 data types always have 121 as the default style. Если запрос основан на прежнем поведении, следует использовать уровень совместимости ниже 110 либо явно задать в затрагиваемом запросе стиль 0.If a query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

Значение уровня совместимостиCompatibility level value Стиль по умолчанию для операций CAST и CONVERT1Default style for CAST and CONVERT1 Стиль по умолчанию для вычисляемого столбцаDefault style for computed column
< 110< 110 121121 00
> = 110> = 110 121121 121121

1 Кроме вычисляемых столбцов1 Except for computed columns

Обновление базы данных до уровня совместимости 110 и выше не приведет к изменению пользовательских данных, сохраненных на диске.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. Следует исправить эти данных соответствующим образом вручную.You must manually correct this data as appropriate. Например, если бы вы использовали предложение SELECT INTO для создания таблицы на основе источника, содержащего описанное выше выражение вычисляемого столбца, то сохранялись бы данные (благодаря стилю 0), а не само определение вычисляемого столбца.For example, if you used SELECT INTO to create a table from a source containing a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. В таком случае необходимо вручную обновлять эти данные в соответствии со стилем 121.You must manually update this data to match style 121.

ПримерыExamples

A.A. Использование функций CAST и CONVERTUsing both CAST and CONVERT

В этих примерах получаются имена продуктов, у которых первая цифра цены — 3, для чего их значения ListPrice преобразовываются к int.These examples retrieve the name of the product, for those products that have a 3 as the first digit of list price, and converts their ListPrice values to int.

-- Use CAST  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CAST(ListPrice AS int) LIKE '33%';  
GO  
  
-- Use CONVERT.  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CONVERT(int, ListPrice) LIKE '33%';  
GO  

Результирующий набор:Here is the result set. Образец результирующего набора одинаков для операций CAST и CONVERT.The sample result set is the same for both CAST and CONVERT.

ProductName                    ListPrice
------------------------------ ---------------------
LL Road Frame - Black, 58      337.22
LL Road Frame - Black, 60      337.22
LL Road Frame - Black, 62      337.22
LL Road Frame - Red, 44        337.22
LL Road Frame - Red, 48        337.22
LL Road Frame - Red, 52        337.22
LL Road Frame - Red, 58        337.22
LL Road Frame - Red, 60        337.22
LL Road Frame - Red, 62        337.22
LL Road Frame - Black, 44      337.22
LL Road Frame - Black, 48      337.22
LL Road Frame - Black, 52      337.22
Mountain-100 Black, 38         3374.99
Mountain-100 Black, 42         3374.99
Mountain-100 Black, 44         3374.99
Mountain-100 Black, 48         3374.99
HL Road Front Wheel            330.06
LL Touring Frame - Yellow, 62  333.42
LL Touring Frame - Blue, 50    333.42
LL Touring Frame - Blue, 54    333.42
LL Touring Frame - Blue, 58    333.42
LL Touring Frame - Blue, 62    333.42
LL Touring Frame - Yellow, 44  333.42
LL Touring Frame - Yellow, 50  333.42
LL Touring Frame - Yellow, 54  333.42
LL Touring Frame - Yellow, 58  333.42
LL Touring Frame - Blue, 44    333.42
HL Road Tire                   32.60

(28 rows affected)

Б.B. Использование функции CAST с арифметическими операторамиUsing CAST with arithmetic operators

В этом примере вычисляется столбец значений (Computed) путем деления суммарных продаж за год (SalesYTD) на проценты комиссионных (CommissionPCT).This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Это значение округляется до ближайшего целого числа, после чего с помощью функции CAST приводится к типу данных int.This value is rounded to the nearest whole number and is then CAST to an int data type.

USE AdventureWorks2012;  
GO  
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS INT) AS Computed  
FROM Sales.SalesPerson   
WHERE CommissionPCT != 0;  
GO  

Результирующий набор:Here is the result set.

Computed
------
379753754
346698349
257144242
176493899
281101272
0  
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107

(14 row(s) affected)  

В.C. Использование функции CAST для объединения строкUsing CAST to concatenate

В этом примере несимвольные выражения сцепляются с помощью функции CAST.This example concatenates noncharacter expressions by using CAST. В этом примере используется база данных AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT 'The list price is ' + CAST(ListPrice AS VARCHAR(12)) AS ListPrice  
FROM dbo.DimProduct  
WHERE ListPrice BETWEEN 350.00 AND 400.00;  

Результирующий набор:Here is the result set.

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  

Г.D. Использование функции CAST для получения удобочитаемого текстаUsing CAST to produce more readable text

В этом примере функция CAST используется в списке SELECT для преобразования значений столбца Name к значениям типа char(10) .This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. В этом примере используется база данных AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT DISTINCT CAST(EnglishProductName AS CHAR(10)) AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';  

Результирующий набор:Here is the result set.

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99  

Д.E. Использование функции CAST с предложением LIKEUsing CAST with the LIKE clause

В этом примере значения SalesYTD столбца money преобразуются в тип данных int, после чего преобразуются в тип данных char(20), что позволяет использовать их в предложении LIKE.This example converts the money column SalesYTD values to data type int, and then to data typechar(20), so that the LIKE clause can use it.

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  

Результирующий набор:Here is the result set.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289

(3 row(s) affected)  

Е.F. Использование функции CONVERT или CAST с типизированным XMLUsing CONVERT or CAST with typed XML

В этих примерах показано использование функции CONVERT для преобразования данных в типизированный XML-код с помощью столбцов и типа данных XML (SQL Server).These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

В этом примере строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором удаляются все незначащие пробельные символы (пробелы, разделяющие узлы):This example converts a string with white space, text and markup into typed XML, and removes all insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root><child/></root>')  

В этом примере похожая строка, содержащая пробельные символы, текст и разметку, преобразуется в типизированный XML, в котором сохраняются все незначащие пробельные символы (пробелы, разделяющие узлы):This example converts a similar string with white space, text and markup into typed XML and preserves insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root>          <child/>         </root>', 1)  

В этом примере строка, содержащая пробельные символы, текст и разметку, приводится к типизированному XML:This example casts a string with white space, text, and markup into typed XML:

SELECT CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)  

Дополнительные примеры см. в статье Создание экземпляров XML-данных.See Create Instances of XML Data for more examples.

Ж.G. Использование функций CAST и CONVERT с данными типа datetimeUsing CAST and CONVERT with datetime data

Начиная со значений GETDATE() этот пример показывает текущие дату и время, использует функцию CAST для изменения текущей даты и времени в символьный тип данных и затем использует CONVERT для отображения даты и времени в формате ISO 8601.Starting with GETDATE() values, this example displays the current date and time, uses CAST to change the current date and time to a character data type, and then uses CONVERT to display the date and time in the ISO 8601 format.

SELECT   
   GETDATE() AS UnconvertedDateTime,  
   CAST(GETDATE() AS NVARCHAR(30)) AS UsingCast,  
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;  
GO  

Результирующий набор:Here is the result set.

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)  

Этот пример — частичная противоположность предыдущему примеру.This example is approximately the opposite of the previous example. Этот пример отображает дату и время в виде символьных данных, использует функцию CAST для изменения символьных данных в тип данных datetime, а затем функцию CONVERT для изменения символьных данных в тип данных datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type.

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  

Результирующий набор:Here is the result set.

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)  

З.H. Использование функции CONVERT с двоичными и символьными даннымиUsing CONVERT with binary and character data

В этих примерах показаны результаты преобразования двоичных и символьных данных с использованием различных стилей.These examples show the results of binary and character data conversion, using different styles.

--Convert the binary value 0x4E616d65 to a character value.  
SELECT CONVERT(CHAR(8), 0x4E616d65, 0) AS [Style 0, binary to character];  

Результирующий набор:Here is the result set.

Style 0, binary to character
----------------------------
Name  

(1 row(s) affected)  

В этом примере показано, что стиль 1 может привести к принудительному усечению результата.This example shows that Style 1 can force result truncation. К этому приводит наличие символов 0x в результате.The characters 0x in the result set force the truncation.

SELECT CONVERT(CHAR(8), 0x4E616d65, 1) AS [Style 1, binary to character];  

Результирующий набор:Here is the result set.

Style 1, binary to character
------------------------------
0x4E616D

(1 row(s) affected)  

В этом примере показано, что стиль 2 не вызывает усечение результата, так как символы 0x не включены в результат.This example shows that Style 2 does not truncate the result, because the result does not include the characters 0x.

SELECT CONVERT(CHAR(8), 0x4E616d65, 2) AS [Style 2, binary to character];  

Результирующий набор:Here is the result set.

Style 2, binary to character
------------------------------
4E616D65

(1 row(s) affected)  

Преобразуйте символьное значение "Name" в двоичное значение.Convert the character value 'Name' to a binary value.

SELECT CONVERT(BINARY(8), 'Name', 0) AS [Style 0, character to binary];  

Результирующий набор:Here is the result set.

Style 0, character to binary
----------------------------
0x4E616D6500000000

(1 row(s) affected)  
SELECT CONVERT(BINARY(4), '0x4E616D65', 1) AS [Style 1, character to binary];  

Результирующий набор:Here is the result set.

Style 1, character to binary
---------------------------- 
0x4E616D65

(1 row(s) affected)  
SELECT CONVERT(BINARY(4), '4E616D65', 2) AS [Style 2, character to binary];  

Результирующий набор:Here is the result set.

Style 2, character to binary  
----------------------------------  
0x4E616D65

(1 row(s) affected)  

И.I. Конвертирование типов данных даты и времениConverting date and time data types

Этот пример демонстрирует преобразование типов данных date, time и datetime.This example shows the conversion of date, time, and 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];  

К.J. Использование функции CONVERT с данными типа datetime в разных форматахUsing CONVERT with datetime data in different formats

Начиная со значений GETDATE() этот пример использует функцию CONVERT для отображения всех стилей даты и времени в разделе Стили даты и времени этой статьи.Starting with GETDATE() values, this example uses CONVERT to display of all the date and time styles in section Date and Time styles of this article.

Номер форматаFormat # Пример запросаExample query Пример результатаSample result
00 SELECT CONVERT(NVARCHAR, GETDATE(), 0) Авг 23 2019 1:39PMAug 23 2019 1:39PM
11 SELECT CONVERT(NVARCHAR, GETDATE(), 1) 08/23/1908/23/19
22 SELECT CONVERT(NVARCHAR, GETDATE(), 2) 19.08.2319.08.23
33 SELECT CONVERT(NVARCHAR, GETDATE(), 3) 23/08/1923/08/19
44 SELECT CONVERT(NVARCHAR, GETDATE(), 4) 23.08.1923.08.19
55 SELECT CONVERT(NVARCHAR, GETDATE(), 5) 23-08-1923-08-19
66 SELECT CONVERT(NVARCHAR, GETDATE(), 6) 23 авг 1923 Aug 19
77 SELECT CONVERT(NVARCHAR, GETDATE(), 7) Авг 23, 19Aug 23, 19
8 или 24 или 1088 or 24 or 108 SELECT CONVERT(NVARCHAR, GETDATE(), 8) 13:39:1713:39:17
9 или 1099 or 109 SELECT CONVERT(NVARCHAR, GETDATE(), 9) Авг 23 2019 1:39:17:090PMAug 23 2019 1:39:17:090PM
1010 SELECT CONVERT(NVARCHAR, GETDATE(), 10) 08-23-1908-23-19
1111 SELECT CONVERT(NVARCHAR, GETDATE(), 11) 19/08/2319/08/23
1212 SELECT CONVERT(NVARCHAR, GETDATE(), 12) 190823190823
13 или 11313 or 113 SELECT CONVERT(NVARCHAR, GETDATE(), 13) 23 авг 2019 13:39:17:09023 Aug 2019 13:39:17:090
14 или 11414 or 114 SELECT CONVERT(NVARCHAR, GETDATE(), 14) 13:39:17:09013:39:17:090
20 или 12020 or 120 SELECT CONVERT(NVARCHAR, GETDATE(), 20) 2019-08-23 13:39:172019-08-23 13:39:17
21 или 25 или 12121 or 25 or 121 SELECT CONVERT(NVARCHAR, GETDATE(), 21) 2019-08-23 13:39:17.0902019-08-23 13:39:17.090
2222 SELECT CONVERT(NVARCHAR, GETDATE(), 22) 08/23/19 1:39:17 PM08/23/19 1:39:17 PM
2323 SELECT CONVERT(NVARCHAR, GETDATE(), 23) 2019-08-232019-08-23
101101 SELECT CONVERT(NVARCHAR, GETDATE(), 101) 08/23/201908/23/2019
102102 SELECT CONVERT(NVARCHAR, GETDATE(), 102) 2019.08.232019.08.23
103103 SELECT CONVERT(NVARCHAR, GETDATE(), 103) 23/08/201923/08/2019
104104 SELECT CONVERT(NVARCHAR, GETDATE(), 104) 23.08.201923.08.2019
105105 SELECT CONVERT(NVARCHAR, GETDATE(), 105) 23-08-201923-08-2019
106106 SELECT CONVERT(NVARCHAR, GETDATE(), 106) 23 авг 201923 Aug 2019
107107 SELECT CONVERT(NVARCHAR, GETDATE(), 107) Авг 23, 2019Aug 23, 2019
110110 SELECT CONVERT(NVARCHAR, GETDATE(), 110) 08-23-201908-23-2019
111111 SELECT CONVERT(NVARCHAR, GETDATE(), 111) 2019/08/232019/08/23
112112 SELECT CONVERT(NVARCHAR, GETDATE(), 112) 2019082320190823
113113 SELECT CONVERT(NVARCHAR, GETDATE(), 113) 23 авг 2019 13:39:17.09023 Aug 2019 13:39:17.090
120120 SELECT CONVERT(NVARCHAR, GETDATE(), 120) 2019-08-23 13:39:172019-08-23 13:39:17
121121 SELECT CONVERT(NVARCHAR, GETDATE(), 121) 2019-08-23 13:39:17.0902019-08-23 13:39:17.090
126126 SELECT CONVERT(NVARCHAR, GETDATE(), 126) 2019-08-23T13:39:17.0902019-08-23T13:39:17.090
127127 SELECT CONVERT(NVARCHAR, GETDATE(), 127) 2019-08-23T13:39:17.0902019-08-23T13:39:17.090
130130 SELECT CONVERT(NVARCHAR, GETDATE(), 130) 22 ذو الحجة 1440 1:39:17.090P22 ذو الحجة 1440 1:39:17.090P
131131 SELECT CONVERT(NVARCHAR, GETDATE(), 131) 22/12/1440 1:39:17.090PM22/12/1440 1:39:17.090PM

K.K. Результат применения приоритета типов данных при допустимых преобразованияхEffects of data type precedence in allowed conversions

В приведенном ниже примере определяется переменная типа VARCHAR, ей присваивается значение, а затем выбирается объединение переменной со строкой.The following example defines a variable of type VARCHAR, assigns an integer value to the variable, then selects a concatenation of the variable with a string.

DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.' AS Result

Результирующий набор:Here is the result set.

Result
-----------------------
1 is a string.

Значение 1 типа int было преобразовано в тип VARCHAR.The int value of 1 was converted to a VARCHAR.

В этом примере показан похожий запрос с переменной типа int:This example shows a similar query, using an int variable instead:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.' AS Result

В этом случае инструкция SELECT выдает следующую ошибку:In this case, the SELECT statement will throw the following error:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.

Чтобы вычислить выражение @notastring + ' is not a string.', SQL ServerSQL Server необходимо следовать правилам приоритета типов данных для выполнения неявного преобразования перед вычислением результата выражения.In order to evaluate the expression @notastring + ' is not a string.', SQL ServerSQL Server needs to follow the rules of data type precedence to complete the implicit conversion before the result of the expression can be calculated. Так как int имеет более высокий приоритет, чем VARCHAR, SQL ServerSQL Server пытается преобразовать строку в целое число, и операция завершается ошибкой, так как эта строка не может быть преобразована в целое число.Because int has a higher precedence than VARCHAR, SQL ServerSQL Server attempts to convert the string to an integer and fails because this string cannot be converted to an integer.

Если предоставить строку, которую можно преобразовать, инструкция завершается успешно, как показано в следующем примере:If we provide a string that can be converted, the statement will succeed, as seen in the following example:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'

В этом случае строка '1' может быть преобразована в целочисленное значение 1, поэтому инструкция SELECT возвращает значение 2.In this case, the string '1' can be converted to the integer value 1, so this SELECT statement will return the value 2. Если предоставленные типы данных являются целочисленными, оператор + становится математическим оператором сложения, а не объединения строк.When the data types provided are integers, the + operator becomes addition mathematical operator, rather than a string concatenation.

Примеры: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) and Параллельное хранилище данныхParallel Data Warehouse

М.L. Использование функций CAST и CONVERTUsing CAST and CONVERT

В этом примере извлекаются имена продуктов, у которых первая цифра цены — 3, а затем их значения ListPrice преобразовываются в int. В нем используется база данных AdventureWorksDW2016.This example retrieves the name of the product for those products that have a 3 in the first digit of their list price, and converts the ListPrice of these products to int. It uses the AdventureWorksDW2016 database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(ListPrice AS int) LIKE '3%';  

В этом примере показан тот же запрос, в котором вместо функции CAST используется CONVERT.This example shows the same query, using CONVERT instead of CAST. В нем используется база данных AdventureWorksDW2016.It uses the AdventureWorksDW2016 database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CONVERT(INT, ListPrice) LIKE '3%';  

Н.M. Использование функции CAST с арифметическими операторамиUsing CAST with arithmetic operators

В этом примере вычисляется отдельное значение столбца путем деления цены единицы товара (UnitPrice) на процент скидки (UnitPriceDiscountPct).This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). После округления до ближайшего целого числа результат преобразуется к типу данных int.This result is then rounded to the nearest whole number, and finally converted to an int data type. В этом примере используется база данных AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

SELECT ProductKey, UnitPrice,UnitPriceDiscountPct,  
       CAST(ROUND (UnitPrice*UnitPriceDiscountPct,0) AS int) AS DiscountPrice  
FROM dbo.FactResellerSales  
WHERE SalesOrderNumber = 'SO47355'   
      AND UnitPriceDiscountPct > .02;  

Результирующий набор:Here is the result set.

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1  

О.N. Использование функции CAST с предложением LIKEUsing CAST with the LIKE clause

В этом примере столбец ListPrice типа money преобразуется в тип int, а затем в тип char(20) так, чтобы его можно было использовать в предложении LIKE.This example converts the money column ListPrice to an int type, and then to a char(20) type, so that the LIKE clause can use it. В этом примере используется база данных AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

SELECT EnglishProductName AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(CAST(ListPrice AS INT) AS CHAR(20)) LIKE '2%';  

П.O. Использование функций CAST и CONVERT с данными типа datetimeUsing CAST and CONVERT with datetime data

В этом примере отображаются текущие дата и время, используется функция CAST для преобразования текущей даты и времени в символьный тип данных, а затем функция CONVERT для отображения даты и времени в формате ISO 8601.This example displays the current date and time, uses CAST to change the current date and time to a character data type, and finally uses CONVERT display the date and time in the ISO 8601 format. В этом примере используется база данных AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

SELECT TOP(1)  
   SYSDATETIME() AS UnconvertedDateTime,  
   CAST(SYSDATETIME() AS NVARCHAR(30)) AS UsingCast,  
   CONVERT(NVARCHAR(30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601  
FROM dbo.DimCustomer;  

Результирующий набор:Here is the result set.

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601  
---------------------   ---------------------------   ---------------------------  
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025  

Этот пример — частичная противоположность предыдущему примеру.This example is the rough opposite of the previous example. В этом примере отображаются дата и время в виде символьных данных, используется функция CAST для преобразования символьных данных в тип datetime, а затем функция CONVERT для преобразования символьных данных в тип datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type. В этом примере используется база данных AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

SELECT TOP(1)   
   '2010-07-25T13:50:38.544' AS UnconvertedText,  
CAST('2010-07-25T13:50:38.544' AS DATETIME) AS UsingCast,  
   CONVERT(DATETIME, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601  
FROM dbo.DimCustomer;  

Результирующий набор:Here is the result set.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM  

См. также разделSee also

Приоритет типов данных (Transact-SQL) Data type precedence (Transact-SQL)
Преобразование типов данных (ядро СУБД) Data Type Conversion (Database Engine)
FORMAT (Transact-SQL) FORMAT (Transact-SQL)
STR (Transact-SQL) STR (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Системные функции (Transact-SQL) System Functions (Transact-SQL)
Поддержка параметров сортировки и Юникода Collation and Unicode Support
Написание инструкций Transact-SQL, адаптированных к международному использованиюWrite International Transact-SQL Statements