SQL - Cast y Convert
SQL - Cast y Convert
SQL - Cast y Convert
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 1/17
Traduccin Original
Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo
para ver el texto original. Ms informacin.
CAST y CONVERT (Transact-SQL)
Convierte una expresin de un tipo de datos en otro en SQL Server 2014.
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versin actual), Windows Azure SQL Database (desde la versin
inicial hasta la versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
Argumentos
expression
Es cualquier expresin vlida.
data_type
Es el tipo de datos de destino. Incluye xml, bigint y sql_variant. No se pueden utilizar tipos de datos de alias.
length
Es un nmero entero opcional que especifica la longitud del tipo de datos de destino. El valor predeterminado es
30.
style
Es una expresin de tipo entero que especifica cmo la funcin CONVERT traducir expression. Si style es NULL, se
devuelve NULL. data_type determina el intervalo. Para obtener ms informacin, vea la seccin Comentarios.
Tipos de valor devueltos
Devuelve el tipo expression traducido al tipo data_type.
SQL Server 2014 Este tema an no ha recibido ninguna valoracin
Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 2/17
Comentarios
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora, style puede ser uno de los valores que se muestran en la tabla
siguiente. Otros valores se procesan como 0. . A partir de SQL Server 2012, los nicos estilos que se admiten al convertir
desde tipos de fecha y hora a datetimeoffset son 0 o 1. Todos los dems estilos de conversin devuelven el error 9809.
SQL Server admite el formato de fecha en estilo rabe mediante el algoritmo kuwait.
Sin el
siglo
(aa)
(
1
)
Con
el
siglo
(aaaa)
Estndar
Entrada/salida (
3
)
- 0 o
100
(
1,2
)
Predeterminado mes dd aaaa hh:mia.m. (o p.m.)
1 101 EE. UU. 1 = mm/dd/aa
101 = mm/dd/aaaa
2 102 ANSI 2 = aa.mm.dd
102 = aaaa.mm.dd
3 103 Britnico/Francs 3 = dd/mm/aa
103 = dd/mm/aaaa
4 104 Alemn 4 = dd.mm.aa
104 = dd.mm.aaaa
5 105 Italiano 5 = dd-mm-aa
105 = dd-mm-aaaa
6 106
(1)
- 6 = dd mes aa
106 = dd mes aaaa
7 107
(1)
- 7 = Mes dd, aa
107 = Mes dd, aaaa
8 108 - hh:mi:ss
- 9
109
(
1,2
)
Valor
predeterminado
+ milisegundos
mes dd aaaa hh:mi:ss:mmma.m. (o p.m.)
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 3/17
10 110 EE. UU. 10 = mm-dd-aa
110 = mm-dd-aaaa
11 111 JAPN 11 = aa/mm/dd
111 = aaaa/mm/dd
12 112 ISO 12 = aammdd
112 = aaaammdd
- 13 o
113
(
1,2
)
Europeo
predeterminado
+ milisegundos
dd mes aaaa hh:mi:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20
120
(
2
)
ODBC cannico aaaa-mm-dd hh:mi:ss(24h)
- 21
121
(
2
)
ODBC cannico
(con
milisegundos)
aaaa-mm-dd hh:mi:ss.mmm(24h)
- 126
(
4
)
ISO8601 aaaa-mm-ddThh:mi:ss.mmm (sin espacios)
Nota
Cuando el valor para milisegundos (mmm) es 0, no se muestra el valor de
milisegundos. Por ejemplo, el valor '2012-11-07T18:26:20.000' se muestra
como '2012-11-07T18:26:20'.
-
127(
6,
7
)
ISO8601 con
zona horaria Z.
aaaa-mm-ddThh:mi:ss.mmmZ (sin espacios)
Nota
Cuando el valor para milisegundos (mmm) es 0, no se muestra el valor de
milisegundos. Por ejemplo, el valor '2012-11-07T18:26:20.000' se muestra
como '2012-11-07T18:26:20'.
- 130
(
1,2
)
Hijri (
5
)
dd mes aaaa hh:mi:ss:mmma.m.
En este estilo, mes es una representacin Unicode Hijri multitoken del nombre
completo del mes. Este valor no se representar correctamente en una
instalacin estadounidense predeterminada de SSMS.
- 131
(
2
)
Hijri (
5
)
dd/mm/aaaa hh:mi:ss:mmma.m.
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 4/17
1
Estos valores de estilo devuelven resultados no deterministas. Incluye todos los estilos (aa) (sin el siglo) y un
subconjunto de estilos (aaaa) (con el siglo).
2
Los valores predeterminados (style0 o 100, 9 o 109, 13 o 113, 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa).
3
Entrada cuando se convierte en datetime; salida cuando se convierte en datos de caracteres.
4
Diseado para usarse con XML. Para convertir datos datetime o smalldatetime en datos de caracteres, el formato de
salida es el descrito en la tabla anterior.
5
Hijri es un sistema del calendario con varias variaciones. SQL Server utiliza el algoritmo kuwait.
Importante
De forma predeterminada, SQL Server interpreta los aos de dos dgitos segn el ao lmite 2049. Es decir, el ao 49
de dos dgitos se interpreta como 2049 y el ao 50 de dos dgitos se interpreta como 1950. Muchas aplicaciones
cliente, como las que se basan en objetos de automatizacin, utilizan el ao lmite de 2030. SQL Server proporciona la
opcin de configuracin two digit year cutoff que cambia el ao lmite usado por SQL Server y permite el tratamiento
coherente de fechas. Se recomienda especificar aos de cuatro dgitos.
6
Solo se admite en la conversin de datos de caracteres a datetime o smalldatetime. Cuando se convierten datos de
caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime, el
componente de hora no especificado se establece en 00:00:00.000 y el componente de fecha no especificado se
establece en 1900-01-01.
7
El indicador opcional de zona horaria, Z, se usa para facilitar la asignacin de valores XML de tipo datetime que
contienen informacin de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horaria. Z es el
indicador para la zona horaria UTC-0. Las otras zonas horarias se indican con un desplazamiento de HH:MM en sentido
+ o -. Por ejemplo: 2006-12-12T23:45:12-08:00.
Cuando se convierten datos de caracteres de tipo smalldatetime, los estilos que incluyen segundos o milisegundos
muestran ceros en dichas posiciones. Puede truncar las partes de la fecha no deseadas cuando convierta valores
datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varchar.
Cuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora, se anexa un
ajuste de zona horaria al resultado.
Estilos float y real
Cuando expression es float o real, style puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores
se procesan como 0.
Valor Salida
0 (valor predeterminado) Un mximo de 6 dgitos. Utilcelo en notacin cientfica cuando proceda.
1 Siempre 8 dgitos. Utilcelo siempre en notacin cientfica.
2 Siempre 16 dgitos. Utilcelo siempre en notacin cientfica.
126, 128, 129 Se incluye por razones heredadas y podra quedar desusado en una versin futura.
Estilos money y smallmoney
Cuando expression es money o smallmoney, style, puede ser uno de los valores que se muestran en la tabla siguiente.
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 5/17
Otros valores se procesan como 0.
Valor Salida
0 (valor
predeterminado)
Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y dos dgitos a
la derecha del separador decimal; por ejemplo, 4235,98.
1 Separadores de millar cada tres dgitos a la izquierda del separador decimal y dos dgitos a la
derecha del separador decimal; por ejemplo, 3.510,92.
2 Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y cuatro dgitos
a la derecha del separador decimal; por ejemplo, 4235,9819.
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xml
Cuando expression es xml, style, puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores se
procesan como 0.
Valor Salida
0 (valor
predeterminado)
Utiliza el comportamiento de anlisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno.
Nota
Al convertir al tipo de datos xml, los espacios en blanco insignificantes de SQL Server se
controlan de forma distinta que en XML 1.0. Para obtener ms informacin, vea Crear
instancias de datos XML.
1 Conserva los espacios en blanco insignificantes. Esta configuracin establece el control xml:space
predeterminado de modo que se comporte igual que si se hubiera especificado
xml:space="preserve".
2 Habilita el procesamiento limitado de subconjuntos DTD internos.
Si est habilitado, el servidor puede utilizar la siguiente informacin proporcionada en un
subconjunto DTD interno para realizar operaciones de anlisis que no se validan.
Se aplican los valores predeterminados de los atributos.
Las referencias a entidades internas se resuelven y se amplan.
Se comprobar la correccin sintctica del modelo de contenido DTD.
El analizador pasar por alto los subconjuntos DTD externos. Tampoco evala la declaracin XML
para ver si el atributo standalone est establecido en yes o no, pero analiza la instancia XML
como si se tratase de un documento independiente.
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos.
Estilos binarios
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 6/17
Cuando expression es binary(n), varbinary(n), char(n) o varchar(n), style puede ser uno de los valores que se muestran
en la tabla siguiente. Los valores de estilos que no se enumeran en la tabla devuelven un error.
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCII. Cada carcter o
byte se convierte con una proporcin 1:1.
Si data_type es un tipo binario, los caracteres 0x se agregan a la izquierda del resultado.
1, 2 Si data_type es un tipo binario, la expresin debe ser de caracteres. expression se debe componer
de un nmero par de dgitos hexadecimales (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e,
f). Si style se establece en 1, los caracteres 0x deben ser los dos primeros caracteres de la
expresin. Si la expresin contiene un nmero impar de caracteres o si alguno de los caracteres
no es vlido, se produce un error.
Si la longitud de la expresin convertida es mayor que la longitud de data_type, el resultado se
truncar a la derecha.
Los data_types de longitud fija que sean mayores que el resultado convertido tendrn ceros
agregados a la derecha del resultado.
Si data_type es un tipo de caracteres, la expresin debe ser binaria. Cada carcter binario se
convierte en dos caracteres hexadecimales. Si la longitud de la expresin convertida es mayor
que la longitud de data_type, se truncar a la derecha.
Si data_type es un tipo de caracteres de tamao fijo y la longitud del resultado convertido es
menor que la longitud de data_type, los espacios se agregan a la derecha de la expresin
convertida para mantener un nmero par de dgitos hexadecimales.
Los caracteres 0x se agregarn a la izquierda del resultado convertido para style 1.
Conversiones implcitas
Las conversiones implcitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERT.
Las conversiones explcitas son aquellas conversiones que requieren la especificacin de las funciones CAST o CONVERT.
En la siguiente ilustracin se muestran todas las conversiones de tipos de datos explcitas e implcitas permitidas para
los tipos de datos proporcionados por el sistema de SQL Server. Incluyen xml, bigint y sql_variant. No existe una
conversin implcita en la asignacin del tipo de datos sql_variant, pero s hay una conversin implcita en sql_variant.
Sugerencia
Este grfico est disponible como archivo PDF para descargar en el Centro de descarga Microsoft.
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 7/17
Al convertir entre datetimeoffset y los tipos de caracteres char, varchar, nchar y nvarchar, la parte del ajuste de zona
horaria convertida siempre debe tener dgitos dobles para HH y MM, por ejemplo -08:00.
Nota
Puesto que los datos Unicode siempre utilizan un nmero par de bytes, preste atencin al convertir datos binary o
varbinary en o desde tipos de datos compatibles con Unicode. Por ejemplo, la siguiente conversin no devuelve el
valor hexadecimal 41, sino 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).
Tipos de datos de valor grande
Los tipos de datos de valor grande tienen el mismo comportamiento de conversin implcito y explcito que sus
equivalentes ms pequeos, especialmente los tipos de datos varchar, nvarchar y varbinary. No obstante, se deben
tener en cuenta las siguientes directrices:
La conversin de datos image en varbinary(max) y viceversa es una conversin implcita, al igual que las
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 8/17
conversiones entre text y varchar(max) y entre ntext y nvarchar(max).
La conversin de tipos de datos de valor grande, como varchar(max), en un tipo de datos equivalente ms
pequeo, como varchar, es una conversin implcita, aunque se producir truncamiento si el valor grande es
demasiado grande para la longitud especificada del tipo de datos ms pequeo.
La conversin de varchar, nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se
realiza de forma implcita.
La conversin del tipo de datos sql_variant en los tipos de datos de valor grande es una conversin explcita.
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant.
Para obtener ms informacin acerca de la conversin del tipo de datos xml, vea Crear instancias de datos XML.
xml Data Type
Cuando se convierte de forma explcita o implcita el tipo de datos xml en un tipo de datos de cadena o binario, el
contenido del tipo de datos xml se serializa en funcin de un conjunto de reglas. Para obtener informacin sobre estas
reglas, vea Definir la serializacin de datos XML. Para obtener informacin sobre la conversin de otros tipos de datos
al tipo de datos xml, vea Crear instancias de datos XML.
Tipos de datos text e image
No se admite la conversin automtica de los tipos de datos text e image. Puede convertir explcitamente datos text en
datos de caracteres y datos image en binary o varbinary, pero la longitud mxima es de 8000 bytes. Si intenta una
conversin incorrecta, como la de una expresin de caracteres que incluye letras en un tipo int, SQL Server devuelve un
mensaje de error.
Intercalacin de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra, la salida tiene la misma
intercalacin y etiqueta de intercalacin que la entrada. Si la entrada no es una cadena de caracteres, la salida tiene la
intercalacin predeterminada de la base de datos y una etiqueta de intercalacin coaccionable-predeterminada. Para
obtener ms informacin, vea Prioridad de intercalacin (Transact-SQL).
Para asignar otra intercalacin a la salida, aplique la clusula COLLATE a la expresin de resultado de las funciones CAST
o CONVERT. Por ejemplo:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultados
Al convertir expresiones de caracteres o binarias (char, nchar, nvarchar, varchar, binary o varbinary) en una expresin
de un tipo de datos diferente, los datos se pueden truncar, se pueden presentar parcialmente o se puede devolver un
error porque el resultado es demasiado corto para ser mostrado. Las conversiones en char, varchar, nchar, nvarchar,
binary y varbinary se truncan, excepto aquellas que se muestran en la siguiente tabla.
De tipo de datos En tipo de datos Resultado
int , smallint o tinyint char *
varchar *
nchar E
nvarchar E
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 9/17
money , smallmoney, numeric, decimal, float o real char E
varchar E
nchar E
nvarchar E
* = Resultado demasiado corto para ser mostrado. E = Error devuelto porque el resultado es demasiado corto para ser
mostrado.
SQL Server garantiza que solo las conversiones circulares, las conversiones que convierten un tipo de datos en otro y
despus vuelven a convertirlo en el tipo de datos original, devolvern los mismos valores en versiones diferentes. En el
siguiente ejemplo se muestra una conversin circular:
Nota
No intente crear valores binary y despus convertirlos a un tipo de datos de la categora de datos numricos. SQL
Server no garantiza que el resultado de una conversin de tipos de datos decimal o numeric a binary sea idntica
en las distintas versiones de SQL Server.
En el siguiente ejemplo se muestra una expresin resultante demasiado corta para ser mostrada.
El conjunto de resultados es el siguiente.
FirstName LastName Title Sick Leave
--------- ------------- ------- --------
Ken Sanchez NULL *
Terri Duffy NULL *
Roberto Tamburello NULL *
Rob Walters NULL *
Gail Erickson Ms. *
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));
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;
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 10/17
(5 row(s) affected)
Al convertir tipos de datos que difieren en los decimales, algunas veces el valor resultante se trunca y otras se redondea.
En la siguiente tabla se muestra el comportamiento.
De En Comportamiento
numeric numeric Redondeo
numeric int Truncamiento
numeric money Redondeo
money int Redondeo
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversin de los valores float que utilizan la notacin cientfica a decimal o numeric se
restringe nicamente a los valores con una precisin de 17 dgitos. Cualquier valor con una
precisin mayor de 17 se redondea a cero.
float datetime Redondeo
datetime int Redondeo
Por ejemplo, el resultado de la siguiente conversin es 10:
SELECT CAST(10.6496 AS int);
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen, el
valor se redondea. Por ejemplo, el resultado de la siguiente conversin es $10.3497:
SELECT CAST(10.3496847 AS money);
SQL Server devuelve un mensaje de error cuando se convierten datos char, nchar, varchar o nvarchar no numricos en
los tipos de datos int, float, numeric o decimal. SQL Server tambin devuelve un error cuando se convierte una cadena
vaca (" ") en los tipos de datos numeric o decimal.
Determinadas conversiones de fecha y hora son no deterministas
En la siguiente tabla se muestran los estilos para los que la conversin de cadena a fecha y hora es no determinista.
Todos los estilos por debajo de 100
1 106
107 109
113 130
1
Con la excepcin de los estilos 20 y 21
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 11/17
Caracteres adicionales (pares suplentes)
A partir de SQL Server 2012, si utiliza intercalaciones de caracteres complementarios (SC), una operacin CAST de nchar
o nvarchar a un tipo nchar o nvarchar de menor longitud no realizar el truncamiento dentro de un par suplente; lo
har antes del carcter complementario. Por ejemplo, el fragmento de cdigo siguiente deja @x con solo 'ab'. No hay
espacio suficiente para albergar el carcter suplementario.
Al utilizar intercalaciones de SC, el comportamiento de CONVERT es anlogo al de CAST.
Soporte de compatibilidad
En versiones anteriores a SQL Server, el estilo predeterminado de las operaciones CAST y CONVERT en tipos de datos
time y datetime2 es 121, a menos que se utilice otro tipo en una expresin de columna calculada. Para las columnas
calculadas, el estilo predeterminado es 0. Este comportamiento afecta a las columnas calculadas cuando se crean,
cuando se utilizan en las consultas que implican parametrizacin automtica o cuando se usan en definiciones de
restricciones.
Bajo el nivel de compatibilidad 110 y posteriores, el estilo predeterminado de las operaciones CAST y CONVERT en los
tipos de datos time y datetime2 es siempre 121. Si su consulta se basa en el comportamiento anterior, use un nivel de
compatibilidad menor de 110, o especifique explcitamente el estilo 0 en la consulta correspondiente.
Actualizar la base de datos al nivel de compatibilidad 110 y posteriores no cambiar los datos de usuario que se hayan
almacenado en disco. Debe corregir manualmente estos datos segn convenga. Por ejemplo, si utilizara SELECT INTO
para crear una tabla de un origen que contuviera una expresin de columna calculada como la descrita anteriormente,
se almacenaran los datos (si se usa el estilo 0) en lugar de la propia definicin de columna calculada. Debera actualizar
manualmente estos datos para que coincidieran con el estilo 121.
Ejemplos
A.Utilizar CAST y CONVERT
En cada ejemplo se recupera el nombre de aquellos productos que tienen un 3 como primer dgito del precio y se
convierte ListPrice en int.
DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);
SELECT CAST (@x AS NVARCHAR(3));
-- Use CAST
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO
-- Use CONVERT.
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 12/17
B.Utilizar CAST con operadores aritmticos
En el siguiente ejemplo se calcula una nica columna (Computed) mediante la divisin de las ventas anuales hasta la fecha
(SalesYTD) entre el porcentaje de la comisin (CommissionPCT). El resultado se convierte en un tipo de datos int
despus de redondearlo al nmero entero ms prximo.
El conjunto de resultados es el siguiente.
Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)
C.Utilizar CAST para concatenar
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST.
USE AdventureWorks2012;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS Computed
FROM Sales.SalesPerson
WHERE CommissionPCT != 0;
GO
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 13/17
El conjunto de resultados es el siguiente.
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
(5 row(s) affected)
D.Utilizar CAST para obtener texto ms legible
En el siguiente ejemplo se utiliza CAST en la lista de seleccin para convertir la columna Name en una columna de tipo
char(10).
El conjunto de resultados es el siguiente.
Name UnitPrice
---------- ---------------------
Long-Sleev 31.2437
Long-Sleev 32.4935
Long-Sleev 49.99
(3 row(s) affected)
USE AdventureWorks2012;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO
USE AdventureWorks2012;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail AS s
JOIN Production.Product AS p
ON s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 14/17
E.Utilizar CAST con la clusula LIKE
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y, a continuacin, en una de
tipo char(20) para que se pueda utilizar con la clusula LIKE.
El conjunto de resultados es el siguiente.
FirstName LastName SalesYTD SalesPersonID
---------------- ------------------- ---------------- -------------
Tsvi Reiter 2811012.7151 279
Syed Abbas 219088.8836 288
Rachel Valdez 2241204.0424 289
(3 row(s) affected)
F.Utilizar CONVERT o CAST con XML con tipo
A continuacin se incluyen varios ejemplos en los que se muestra el uso de CONVERT para convertir XML con tipo
mediante el Tipo de datos XML y columnas (SQL Server).
En este ejemplo se convierte una cadena con espacios en blanco, texto y marcado en XML con tipo y se quitan todos los
espacios en blanco insignificantes (espacios en blanco de lmite entre los nodos):
En este ejemplo se convierte una cadena similar con espacios en blanco, texto y marcado en XML con tipo y se
conservan los espacios en blanco insignificantes (espacios en blanco de lmite entre los nodos):
En este ejemplo se convierte una cadena con espacios en blanco, texto y marcado en XML con tipo:
Para obtener ms ejemplos, vea Crear instancias de datos XML.
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
CONVERT(XML, '<root><child/></root>')
CONVERT(XML, '<root> <child/> </root>', 1)
CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>' AS XML)
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 15/17
G.Utilizar CAST y CONVERT con datos de fecha y hora
En el ejemplo siguiente se muestra la fecha y la hora actuales, se utiliza CAST para cambiarlas a un tipo de datos de
caracteres y, a continuacin, se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901.
El conjunto de resultados es el siguiente.
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)
El siguiente ejemplo es lo opuesto, aproximadamente, del ejemplo anterior. En el ejemplo se muestra la fecha y la hora
como datos de caracteres, se utiliza CAST para cambiar los datos de caracteres al tipo de datos datetime y, a
continuacin, se utiliza CONVERT para cambiar los datos de caracteres al tipo de datos datetime.
El conjunto de resultados es el siguiente.
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.Usar CONVERT con datos binarios y de caracteres
Los ejemplos siguientes muestran los resultados de convertir datos binarios y de caracteres utilizando estilos diferentes.
SELECT
GETDATE() AS UnconvertedDateTime,
CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
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
--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 16/17
El conjunto de resultados es el siguiente.
Style 0, binary to character
----------------------------
Name
(1 row(s) affected)
El conjunto de resultados es el siguiente.
Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)
El conjunto de resultados es el siguiente.
Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)
El conjunto de resultados es el siguiente.
Style 0, character to binary
----------------------------------
--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];
--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];
--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];
13/6/2014 CAST y CONVERT (Transact-SQL)
http://msdn.microsoft.com/es-mx/library/ms187928.aspx 17/17
Adiciones de comunidad
0x4E616D6500000000
(1 row(s) affected)
El conjunto de resultados es el siguiente.
Style 1, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)
El conjunto de resultados es el siguiente.
Style 2, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)
Vea tambin
Referencia
SELECT (Transact-SQL)
Funciones del sistema (Transact-SQL)
Conceptos
Conversiones de tipos de datos (motor de base de datos)
Escribir instrucciones Transact-SQL internacionales
2014 Microsoft
SELECT CONVERT(binary(4), '0x4E616D65', 1) AS [Style 1, character to binary];
SELECT CONVERT(binary(4), '4E616D65', 2) AS [Style 2, character to binary];