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.