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

CONVERT() vs TRY_CONVERT en SQL Server:¿Cuál es la diferencia?

Es posible que haya notado que T-SQL incluye un CONVERT() función y un TRY_CONVERT() función que puede usar en SQL Server para realizar conversiones entre tipos de datos. Pero si no sabes cuál es la diferencia entre estas dos funciones, ¡sigue leyendo!

La diferencia entre CONVERT() y TRY_CONVERT() está en la forma en que manejan los tipos de datos que no se pueden convertir. Uno arroja un error, mientras que el otro devuelve nulo. Los siguientes ejemplos lo demuestran.

Función CONVERTIR()

Primero, veamos lo que CONVERT() la función lo hace. Convierte un tipo de datos a otro. He aquí un ejemplo:

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

Resultado:

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

En este ejemplo, convertimos un int valor a varchar(12) . Y debido a que el valor se pudo convertir en nuestro tipo de datos y longitud deseados, esto funcionó perfectamente.

Sin embargo, aunque esto funciona perfectamente cuando la conversión tiene éxito, ¿qué sucede cuando falla?

Cuando falla la conversión → Error

Modifiquemos un poco el código y veamos qué sucede cuando falla la conversión:

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

Resultado:

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

Obtenemos un error.

Función TRY_CONVERT()

El TRY_CONVERT() es una alternativa que podemos usar para evitar el mensaje de error. Esta función realiza la misma operación de conversión de datos que CONVERT() , sin embargo, si esta función no puede realizar la conversión, devuelve null :

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

Resultado:

Result
------
null

Puede tomar este resultado y aplicar código condicional para que suceda algo diferente dependiendo de si la conversión se realiza correctamente o no.

Ejemplo:

SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Resultado:

Result           
-----------------
Conversion failed

Tipos de datos no válidos

Una advertencia con TRY_CONVERT() es que 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_CONVERT(Homer, 10.00) AS Result;

Resultado:

Error: Type Homer is not a defined system type.