Resumen: en este tutorial, aprenderás a utilizar 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:
Code language: PHP (php)SELECT 1 + '1' AS result;
Devuelve 2 como número:
result-----------2(1 row affected)
En esta sentencia, SQL Server convierte implícitamente la cadena de caracteres '1'
en el número 1
.
Cuando se utilizan dos valores con diferentes tipos de datos, SQL Server intentará convertir el tipo de datos inferior al superior antes de poder procesar el cálculo. Esto se conoce como una conversión implícita en SQL Server.
En contraste con las conversiones implícitas, tenemos las conversiones explícitas en las que se llama a la función CAST()
para convertir explícitamente un valor de un tipo a otro:
Code language: PHP (php)SELECT 1 + CAST(1 AS INT) result;
La sintaxis de la función CAST()
es la siguiente:
Code language: CSS (css)CAST ( expression AS target_type )
En esta sintaxis:
-
expression
puede ser un valor literal o una expresión válida de cualquier tipo que será convertida. -
target_type
es el tipo de datos de destino al que se quiere convertir la expresión. IncluyeINT
BIT
SQL_VARIANT
, etc. Tenga 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. Ellength
por defecto 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
Vamos a ver algunos ejemplos de uso de la función CAST()
.
A) Uso de la función CAST() para convertir un decimal a un entero ejemplo
Este ejemplo utiliza la función CAST()
para convertir el número decimal 5.95
a un entero:
Code language: CSS (css)SELECT CAST(5.95 AS INT) result;
Aquí está la salida:
result-----------5(1 row affected)
B) Uso de la función CAST() para convertir un decimal a otro decimal con diferente longitud
El siguiente ejemplo utiliza la función CAST()
para convertir el número decimal 5.95 a otro número decimal con la escala de cero:
Code language: CSS (css)SELECT CAST(5.95 AS DEC(3,0)) result;
La salida es la siguiente:
result-------6
Cuando se convierte un valor de los tipos de datos en diferentes lugares, SQL Server devolverá un resultado truncado o un valor redondeado basado en las siguientes reglas:
De Datos Type | To Data Type | Behavior | |||
---|---|---|---|---|---|
numérico | numérico | Ronda | |||
numérico | int | Truncar | numérico | dinero | Ronda |
dinero | int | Ronda | |||
dinero | numérico | Ronda | |||
float | int | Truncate | float | numérico | Round |
float | numérico | Round | |||
fatetime | int | Ronda |
C) Uso de la función CAST() para convertir una cadena a un valor datetime ejemplo
Este ejemplo utiliza la función CAST()
para convertir la cadena '2019-03-14'
a un datetime:
Code language: PHP (php)SELECT CAST('2019-03-14' AS DATETIME) result;
La salida es:
Code language: CSS (css)result-----------------------2019-03-14 00:00:00.000(1 row affected)
D) Uso de la función CAST() con operadores aritméticos
Utilizaremos las tablas sales.orders
y sales.order_items
de la base de datos de ejemplo para la demostración:
La siguiente sentencia utiliza la función CAST()
para convertir las ventas mensuales de 2017 a valores enteros.
Code language: PHP (php)SELECT MONTH(order_date) month, CAST(SUM(quantity * list_price * (1 - discount)) AS INT) amountFROM sales.orders o INNER JOIN sales.order_items i ON o.order_id = i.order_idWHERE YEAR(order_date) = 2017GROUP BY MONTH(order_date)ORDER BY month;
La siguiente imagen muestra la salida:
En este tutorial, has aprendido a utilizar la función CAST()
de SQL Server para convertir un valor de un tipo a otro.