Функции преобразования

Используйте функции преобразования CAST и CONVERT для преобразования выражений одного типа данных в другой тип, когда SQL Server не выполняет автоматическое преобразование типов данных. Например при сравнении выражений типов char и datetime, smallint и int или выражений типа char с разной длиной SQL Server выполняет их автоматическое преобразование. Такое преобразование называется неявным. Использовать функции CAST или CONVERT для подобных неявных преобразований нет необходимости. Однако функции CAST и CONVERT можно использовать в следующих сценариях преобразования:

  • два выражения принадлежат к одному и тому же типу данных;

  • два выражения неявно преобразуются друг в друга;

  • необходимо явное преобразование типов данных.

При попытке недопустимого преобразования (например преобразования выражения типа char, содержащего буквенные символы, к типу int), SQL Server отображает сообщение об ошибке.

Функции CAST и CONVERT могут также использоваться для получения разнообразных специальных форматов данных, а также могут использоваться в списке выбора, в предложении WHERE, и там, где допустимы выражения.

Если нужно обеспечить совместимость программного кода на языке Transact-SQL со стандартом SQL-92, следует использовать вместо функции CONVERT функцию CAST. Использование функции CONVERT вместо CAST дает преимущество в дополнительной функциональности.

При использовании любой из функций CAST или CONVERT необходимо указать следующее.

  • Выражение для преобразования: например, для отчета о продажах может потребоваться преобразование данных о продажах из денежного типа в символьный.

  • Тип данных, в который преобразуется указанное выражение, например varchar или какой-либо другой системный тип данных SQL Server.

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

Если при преобразовании типа данных не указать длину, SQL Server автоматически примет ее равной 30.

Примеры

В следующих примерах функция CAST используется в первой инструкции SELECT, а CONVERT — во второй инструкции SELECT для преобразования столбца Title в тип nvarchar(20) в целях сокращения длины заголовков.

USE AdventureWorks2008R2;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2 ;
GO

—или—

USE AdventureWorks2008R2;
GO
SELECT CONVERT(nvarchar(20), Title) AS Title, Revision
FROM Production.Document
WHERE Revision < 2 ;
GO

Ниже приведен результирующий набор (как для одного, так и для другого запроса).

Title Revision

--------------------  --------

Crank Arm and Tire M 0

Front Reflector Brac 1

Installing Replaceme 0

Repair and Service G 0

Training Wheels 2 1

(Обработано строк: 5)

В следующем примере столбец HireDate, принадлежащий типу данных datetime, преобразуется к типу данных char(11).

USE AdventureWorks2008R2 ;
GO
SELECT p.FirstName, p.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee AS e 
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID
WHERE p.FirstName = 'Kim' ;
GO

Ниже приводится результирующий набор.

FirstName       LastName                  HireDate

---------       -----------------------   -----------

Kim             Abercrombie               2004-02-17

Kim             Akers                     2003-01-27

(Обработано строк: 2)