Trabajo con tipos de datos

Completado

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

...

...