Trabajo con tipos de datos

Completado

Las columnas y variables usadas en Transact-SQL 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 y hora

Binary

Otros

TINYINT

FLOAT

char

fecha

binary

cursor

SMALLINT

real

varchar

time

varbinary

hierarchyid

int

text

datetime

imagen

sql_variant

bigint

NCHAR

datetime2

table

bit

NVARCHAR

smalldatetime

timestamp

decimal/numérico

ntext

datetimeoffset

UNIQUEIDENTIFIER

NUMERIC

Xml

money

geography

SMALLMONEY

geometry

Nota:

Para obtener más información sobre los distintos tipos de datos y sus atributos, visite la documentación de referencia de Transact-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 + 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. Utilice el gráfico documentación de referencia de Transact-SQL para obtener más información.

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 integer 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 - Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

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 integer:

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 quiera convertir esos valores y pasar por alto 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

NULL

NULL

...

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 un valor es desconocido.

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: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

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

StartDate

FormattedStartDate

2002-06-01T00:00:00

1 de junio de 2002 12:00 a. m.

1/6/2002

2002-06-01T00:00:00

1 de junio de 2002 12:00 a. m.

1/6/2002

2005-07-01T00:00:00

1 de julio de 2005 12:00 a. m.

01/07/2005

2005-07-01T00:00:00

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 de Transact-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

199,99

De forma similar a CAST y CONVERT, PARSE tiene una variante 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 de Transact-SQL.

STR

La función STR convierte un valor numérico en varchar.

Por ejemplo:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Los resultados deberían ser parecidos a esto:

ProductID

Precio

680

$1432.00

706

$1432.00

707

35 USD

...

...