sql >> Base de Datos >  >> RDS >> Sqlserver

CAST() vs TRY_CAST() en SQL Server:¿Cuál es la diferencia?

Al convertir entre tipos de datos en SQL Server, se encontrará con varias funciones que aparentemente hacen lo mismo. Sin embargo, suele haber diferencias entre estas funciones que pueden no ser evidentes a primera vista. Un ejemplo de esto es la diferencia entre CAST() y TRY_CAST() funciones.

Este artículo demuestra la diferencia entre estas funciones cuando se usa SQL Server.

La principal diferencia entre el CAST() y TRY_CAST() funciones está en la forma en que manejan los datos que no se pueden convertir.

Función CAST()

El CAST() La función convierte una expresión de un tipo de datos a otro. Esto le permite hacer cosas como concatenar dos valores de diferentes tipos de datos. Así:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Resultado:

Result     
-----------
Comments: 9

Esto funciona bien cuando los datos se pueden convertir. Pero, ¿y si los datos no se pueden convertir?

En ese caso, obtendrá algo como esto:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Resultado:

Error: Arithmetic overflow error converting numeric to data type varchar.

Esto es bastante justo:si SQL Server no puede convertir los datos, ¡debe saberlo!

Sin embargo, hay otra forma de hacerlo.

La función TRY_CAST()

El TRY_CAST() la función funciona como CAST() excepto que si los datos no se pueden convertir, devuelve null (en lugar de arrojar un error como CAST() hace):

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Resultado:

Result
------
null

Esto puede ser útil si desea utilizar la programación condicional para que la aplicación realice una tarea diferente dependiendo de si los datos se pueden convertir o no.

Ejemplo:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Resultado:

Result     
-----------
Cast failed

Tipos de datos no válidos

El TRY_CAST() La función solo funciona de esta manera cuando se usan tipos de datos válidos. Por lo tanto, obtendrá un error si proporciona explícitamente un tipo de datos que no está permitido.

Ejemplo:

SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;

Resultado:

Error: Type Miami is not a defined system type.