Cómo convertir un valor a otro tipo de dato con la función CAST de SQL Server

Resumen: en este tutorial, aprenderás a usar la función CAST() de SQL Server para convertir un valor o una expresión de un tipo a otro.
Introducción a la función CAST() de SQL Server
Veamos la siguiente consulta:
SELECT 1 + '1' AS result;
Devuelve 2 como un número:
result
-----------
2
(1 row affected)
En esta instrucción, SQL Server convierte implícitamente la cadena de caracteres '1'
en el número 1
.
Cuando usas dos valores con diferentes tipos de datos, SQL Server intentará convertir el tipo de datos inferior al superior antes de que pueda procesar el cálculo. Esto se conoce como conversión implícita en SQL Server.
A diferencia de las conversiones implícitas, tenemos conversiones explícitas en las que se llama a la función CAST()
para convertir explícitamente un valor de un tipo a otro:
SELECT 1 + CAST(1 AS INT) result;
La sintaxis de la función CAST()
es la siguiente:
CAST ( expression AS target_type [ ( length ) ] )
En esta sintaxis:
expression
puede ser un valor literal o una expresión válida de cualquier tipo que se convertirá.target_type
es el tipo de datos de destino al que desea convertir la expresión. Incluye INT, BIT,SQL_VARIANT
, etc. Ten en cuenta que no puede ser un tipo de datos de alias.length
es un entero opcional que especifica la longitud del tipo de destino. La longitud predeterminada es 30.
La función CAST()
devuelve la expresión convertida al tipo de datos de destino.
Ejemplos de la función CAST() de SQL Server
Veamos algunos ejemplos del uso de la función CAST()
.
A) Usando la función CAST() para convertir un decimal a un entero
Este ejemplo utiliza la función CAST()
para convertir el número decimal 5.95
en un número entero:
SELECT CAST(5.95 AS INT) result;
Resultado:
result
-----------
5
(1 row affected)
B) Usando la función CAST()
para convertir un decimal a otro decimal con diferente longitud
El siguiente ejemplo usa la función CAST()
para convertir el número decimal 5.95
a otro número decimal con escala cero:
SELECT CAST(5.95 AS DEC(3,0)) result;
Resultado:
result
-------
6
Cuando conviertes un valor a otro tipo de datos con diferente tamaño, SQL Server devolverá un resultado truncado o un valor redondeado según las siguientes reglas:
Del tipo de datos | Al tipo de datos | Comportamiento |
---|---|---|
numeric | numeric | Round |
numeric | int | Truncate |
numeric | money | Round |
money | int | Round |
money | numeric | Round |
float | int | Truncate |
float | numeric | Round |
float | datetime | Round |
datetime | int | Round |
C) Uso de la función CAST() para convertir una cadena en un valor de fecha y hora
Este ejemplo usa la función CAST()
para convertir la cadena '2019-03-14
' en una fecha y hora:
SELECT
CAST('2019-03-14' AS DATETIME) result;
Resultado:
result
-----------------------
2019-03-14 00:00:00.000
(1 row affected)
D) Usar la función CAST() con operadores aritméticos
Usaremos las tablas sales.orders
y sales.order_items
de la base de datos de ejemplo para la demostración:
La siguiente declaración usa la función CAST()
para convertir las ventas mensuales en 2017
a valores enteros.
SELECT
MONTH(order_date) month,
CAST(SUM(quantity * list_price * (1 - discount)) AS INT) amount
FROM sales.orders o
INNER JOIN sales.order_items i ON o.order_id = i.order_id
WHERE
YEAR(order_date) = 2017
GROUP BY
MONTH(order_date)
ORDER BY
month;
La siguiente imagen muestra la salida:
En este tutorial, has aprendido a usar la función CAST()
de SQL Server para convertir un valor de un tipo a otro.