Trabajo con tipos de datos
Las columnas y variables usadas en Transact-SQL cada una tienen un tipo de datos. El comportamiento de los valores de las expresiones depende del tipo de datos de la columna o variable a la que se hace referencia. Por ejemplo, como vimos anteriormente, puede usar el operador + para concatenar dos valores de cadena o para agregar dos valores numéricos.
En la tabla siguiente se muestran los tipos de datos comunes admitidos en una base de datos de SQL Server.
Valor numérico exacto
Valor numérico aproximado
Carácter
Fecha/Hora
Binario
Otros
tinyint
float
char
fecha
binario
cursor
smallint
verdadero
varchar
Tiempo
varbinary
hierarchyid
int
texto
fecha y hora
imagen
sql_variant
bigint
nchar
datetime2
tabla
bit
nvarchar
smalldatetime
marca de tiempo
decimal/numérico
ntext
datetimeoffset
uniqueidentifier
numérico
xml
dinero
geografía
smallmoney
geometría
Nota
Para obtener más información sobre los distintos tipos de datos y sus atributos, visite la documentación de referencia deTransact-SQL.
Conversión de tipo de datos
Los valores de tipos de datos compatibles se pueden convertir implícitamente según sea necesario. Por ejemplo, supongamos que puede usar el + operador para agregar un número entero a un número decimal , o para concatenar un valor char de longitud fija y un valor varchar de longitud variable. Sin embargo, en algunos casos es posible que tenga que convertir explícitamente valores de un tipo de datos a otro; por ejemplo, intentar usar + para concatenar un valor varchar y un valor decimal producirá un error, a menos que primero convierta el valor numérico en un tipo de datos de cadena compatible.
Nota
Las conversiones implícitas y explícitas se aplican a determinados tipos de datos y algunas conversiones no son posibles. Para obtener más información, use el gráfico en la documentación de referencia deTransact-SQL.
T-SQL incluye funciones que le ayudan a convertir explícitamente entre tipos de datos
CAST y TRY_CAST
La función CAST convierte un valor en un tipo de datos especificado si dicho valor es compatible con el tipo de datos de destino. Se devolverá un error si no es compatible.
Por ejemplo, la consulta siguiente usa CAST para convertir los valores enteros de la columna ProductID en valores varchar (con un máximo de 4 caracteres) para concatenarlos con otro valor basado en caracteres:
SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;
Los resultados posibles de esta consulta podrían tener un aspecto parecido al siguiente:
ProductName
680: HL Road Frame - Black, 58
706: HL Road Frame - Rojo, 58
707: Casco Sport-100, Rojo
708: Casco Sport-100, Negro
...
Sin embargo, supongamos que la columna Size de la tabla Production.Product es una columna nvarchar (longitud variable, datos de texto Unicode) que contiene algunos tamaños numéricos (como 58) y algunos tamaños basados en texto (como "S", "M" o "L"). La consulta siguiente intenta convertir valores de esta columna en un tipo de datos entero :
SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;
Esta consulta produce el siguiente error:
Error: Error de conversión al convertir el valor nvarchar "M" al tipo de datos int.
Dado que al menos algunos de los valores de la columna son numéricos, es posible que desee convertir esos valores e ignorar los demás. Puede usar la función TRY_CAST para convertir tipos de datos.
SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;
Los resultados esta vez podrían ser similares a los siguientes:
NumericSize
58
58
NULO
NULO
...
Los valores que se pueden convertir en un tipo de datos numérico se devuelven como valores decimales y los valores incompatibles se devuelven como NULL, que se usa para indicar que se desconoce un valor.
Nota
Exploraremos las consideraciones para controlar los valores NULL más adelante en esta unidad.
CONVERT y TRY_CONVERT
CAST es la función de SQL del estándar ANSI para convertir entre tipos de datos y se usa en muchos sistemas de base de datos. En Transact-SQL, también puede usar la función CONVERT, como se muestra aquí:
SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;
Una vez más, esta consulta devuelve el valor convertido al tipo de datos especificado de la siguiente forma:
ProductName
680: HL Road Frame - Black, 58
706: HL Road Frame - Red, 58
707: Casco Sport-100, Rojo
708: Casco Sport-100, Negro
...
Al igual que CAST, CONVERT tiene una variante TRY_CONVERT que devuelve NULL para valores incompatibles.
Otra ventaja de usar CONVERT sobre CAST es que CONVERT también incluye un parámetro que permite especificar un estilo de formato al convertir valores numéricos y de fecha en cadenas. Por ejemplo, considere la siguiente consulta:
SELECT SellStartDate,
CONVERT(varchar(20), SellStartDate) AS StartDate,
CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate
FROM SalesLT.Product;
Los resultados de esta consulta podrían tener un aspecto parecido al siguiente:
SellStartDate
Fecha de inicio
FechaDeInicioFormateada
2002-06-01T00:00:00.0000000
1 de junio de 2002 12:00 a. m.
1/6/2002
2002-06-01T00:00:00.0000000
1 de junio de 2002 12:00 a. m.
1/6/2002
2005-07-01T00:00:00.0000000
1 de julio de 2005 12:00 a. m.
01/07/2005
2005-07-01T00:00:00.0000000
1 de julio de 2005 12:00 a. m.
01/07/2005
...
...
...
Nota
Para obtener más información sobre los códigos de formato de estilo que puede usar con CONVERT, consulte la documentación de referencia deTransact-SQL.
PARSE y TRY_PARSE
La función PARSE está diseñada para convertir cadenas con formato que representan valores numéricos o de fecha y hora. Por ejemplo, considere la siguiente consulta (que usa valores literales en lugar de valores de columnas de una tabla):
SELECT PARSE('01/01/2021' AS date) AS DateValue,
PARSE('$199.99' AS money) AS MoneyValue;
Los resultados de esta consulta son similares a los siguientes:
DateValue
MoneyValue
2021-01-01T00:00:00.0000000
199,99
De forma similar a CAST y CONVERT, PARSE tiene una variante de TRY_PARSE que devuelve valores incompatibles como NULL.
Nota
Al trabajar con tipos de datos decimales o numéricos, es posible que tenga que redondear a un número entero o establecer el separador decimal, que se puede lograr a través de la precisión y la escala. Para comprender mejor este concepto de precisión y escala, consulte la documentación de referencia deTransact-SQL.
STR
La función STR convierte un valor numérico en un varchar.
Por ejemplo:
SELECT ProductID, '$' + STR(ListPrice) AS Price
FROM Production.Product;
Los resultados deberían ser parecidos a esto:
Id. de producto
Precio
680
$1432.00
706
$1432.00
707
35 USD
...
...