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 usa CAST en la primera instrucción SELECT y CONVERT en la segunda instrucción SELECT para convertir la columna Title en una columna nvarchar(20) y reducir así la longitud de los títulos.

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

-O bien-

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

Este es el conjunto de resultados (de cualquiera de las consultas).

Título Revisión

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

Brazo de manivela y neumático M 0

Arco reflector delantero 1

Instalar repuesto 0

Reparación y servicio 0

Ruedas de prueba 2 1

(5 filas afectadas)

En el ejemplo siguiente, la columna HireDate, una columna datetime, se convierte en una columna 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

El conjunto de resultados es el siguiente.

FirstName       LastName                  HireDate

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

Kim             Abercrombie               2004-02-17

Kim             Akers                     2003-01-27

(2 filas afectadas)