Funciones de conversión

Use las funciones de conversión CAST y CONVERT para convertir expresiones de un tipo de datos a otro, cuando SQL Server no realice automáticamente las conversiones de tipos de datos. Por ejemplo, si se compara una expresión char con una expresión datetime o una expresión smallint con una expresión int, o expresiones char de distintas longitudes, SQL Server las convierte automáticamente. Esto se denomina conversión implícita. No es necesario utilizar CAST ni CONVERT para estas conversiones implícitas. Sin embargo, se puede utilizar CAST y CONVERT en los escenarios de conversión siguientes:

  • Cuando dos expresiones tienen exactamente el mismo tipo de datos.

  • Cuando dos expresiones se pueden convertir de forma implícita.

  • Cuando es necesario convertir de forma explícita los tipos de datos.

Si intenta realizar una conversión que no es posible (por ejemplo, convertir una expresión char que incluya letras a int), SQL Server muestra un mensaje de error.

También se pueden utilizar las funciones CAST y CONVERT para obtener diversos formatos de datos especiales, así como en la lista de selección, en la cláusula WHERE y en cualquier parte en donde se permita una expresión.

Si desea que el código de programa de Transact-SQL cumpla el estándar SQL-92, utilice CAST en lugar de CONVERT. Utilice CONVERT en lugar de CAST para aprovechar la funcionalidad de CONVERT.

Cuando se utiliza CAST o CONVERT, se necesita la siguiente información:

  • La expresión que se va a convertir; por ejemplo, un informe de ventas necesitaría que los datos de ventas se convirtieran de datos de moneda a datos de caracteres.

  • El tipo de datos al que se va a convertir la expresión especificada; por ejemplo, varchar o cualquier otro tipo de datos del sistema de SQL Server.

A menos que guarde el valor convertido, una conversión sólo será válida mientras dure la función CAST o CONVERT.

Si no especifica ninguna longitud cuando se convierte al tipo de datos, SQL Server suministra automáticamente la longitud 30.

Ejemplos

En los ejemplos siguientes se utiliza CAST en la primera instrucción SELECT y CONVERT en la segunda instrucción SELECT para convertir la columna Title a una columna nvarchar(20) y reducir así la longitud de los títulos.

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

O bien

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

Éste es el conjunto de resultados (de cualquiera de las 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)

En el ejemplo siguiente, la columna HireDate, una columna datetime, se convierte en una columna char(11).

USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee e 
JOIN Person.Contact c ON e.EmployeeID = c.ContactID
WHERE c.FirstName = 'Kim'
GO

Éste es el conjunto de resultados.

FirstName       LastName                       HireDate
---------       -----------------------        -----------
Kim             Abercrombie                    Dec 12 1997
Kim             Akers                          Mar 23 1998

(2 row(s) affected)