Funções de conversão

Use as funções de conversão CAST e CONVERT para converter expressões de um tipo de dados para outro tipo de dados quando as conversões de tipo de dados não forem executadas automaticamente pelo SQL Server. Por exemplo, se você comparar uma expressão char e uma datetime ou uma expressão smallint e uma int, ou expressões char de tamanhos diferentes, o SQL Server irá convertê-las automaticamente. Isso é conhecido como uma conversão implícita. Não é necessário usar CAST ou CONVERT para essas conversões implícitas. Porém, você pode usar CAST e CONVERT nos seguintes cenários de conversão:

  • Duas expressões são exatamente do mesmo tipo de dados.

  • Duas expressões são implicitamente conversíveis.

  • É necessário converter explicitamente os tipos de dados.

Se você tentar uma conversão que não seja possível (por exemplo, converter uma expressão char que inclua letras para int), o SQL Server exibirá uma mensagem de erro.

As funções CAST e CONVERT também podem ser usadas para obter uma diversidade de formatos de dados especiais e podem ser usadas na lista de seleção, na cláusula WHERE e em qualquer local em que uma expressão seja permitida.

Se você quiser que o código de programa do Transact-SQL seja compatível com SQL-92, use CAST em vez de CONVERT. Use CONVERT em vez de CAST para se beneficiar da funcionalidade em CONVERT.

Para usar CAST ou CONVERT, são necessárias as seguintes informações:

  • A expressão a converter: por exemplo, um relatório de vendas exige que os dados de vendas sejam convertidos de dados monetários para dados de caracteres.

  • O tipo de dados para o qual a expressão especificada deve ser convertida, por exemplo, varchar ou qualquer outro tipo de dados de sistema do SQL Server.

Uma conversão só é válida pelo tempo de duração da função CAST ou CONVERT, a menos que você armazene o valor convertido.

Se você não especificar um tamanho ao converter o tipo de dados, o SQL Server fornece automaticamente um tamanho de 30.

Exemplos

Os exemplos a seguir usam CAST na primeira instrução SELECT e CONVERT na segunda instrução SELECT para converter a coluna Title em uma coluna nvarchar(20) para diminuir o tamanho dos títulos.

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

Ou

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

Este é o conjunto de resultados (para ambas as consultas).

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 row(s) affected)

No exemplo a seguir, a coluna HireDate, uma coluna datetime, é convertida em uma coluna 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

Aqui está o conjunto de resultados.

FirstName       LastName                  HireDate

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

Kim             Abercrombie               17-02-2004

Kim             Akers                     27-01-2003

(2 linha(s) afetada(s))