En SQL Server, el PARSE()
y TRY_PARSE()
Las funciones se utilizan para traducir un valor a otro tipo de datos. Esencialmente hacen lo mismo, con una excepción; cómo tratan los errores.
Si PARSE()
falla al intentar analizar a un tipo de datos diferente, devolverá un error. Si TRY_PARSE()
falla, devolverá NULL
.
Ejemplo 1:primero, las similitudes
Aquí hay un ejemplo que demuestra cómo ambas funciones devuelven el mismo resultado cuando pueden analizar con éxito el valor del tipo de datos requerido:
SELECT PARSE('Fri, 8 June 2018' AS date) AS PARSE, PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;
Resultado:
+------------+-------------+ | PARSE | TRY_PARSE | |------------+-------------| | 2018-06-08 | 2018-06-08 | +------------+-------------+
Como era de esperar, ambos devuelven exactamente el mismo resultado.
Pero veamos qué sucede cuando no pueden analizar el valor del tipo de datos requerido.
Ejemplo 2:cuando PARSE() falla
Este es un ejemplo de lo que sucede cuando PARSE()
no puede analizar un valor a otro valor:
SELECT PARSE('Next year' AS date) AS Result;
Resultado:
Error converting string value 'Next year' into data type date using culture ''.
La operación falla porque no proporcioné una representación válida del tipo de datos solicitado. En otras palabras, PARSE()
no se puede convertir Next year
en una fecha tipo de datos según lo solicitado.
Ejemplo 3:cuando falla TRY_PARSE()
Aquí hay un ejemplo cuando intentamos analizar el mismo valor con TRY_PARSE()
:
SELECT TRY_PARSE('Next year' AS date) AS Result;
Resultado:
+----------+ | Result | |----------| | NULL | +----------+
El análisis aún falla, pero devuelve NULL
en lugar de un error.
Ejemplo 4:uso de TRY_PARSE() con una declaración condicional
Podemos tomar TRY_PARSE()
y probar su valor de retorno. Si es un valor NULL, podemos devolver una cosa, si es un valor no NULL, podemos devolver otro:
SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Resultado:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Ejemplo 5:TRY_PARSE() con error
Solo porque TRY_PARSE()
no da como resultado un error en los ejemplos anteriores, no significa que nunca resulta en un error. Hay momentos en los que aún puede obtener un error al usar esta función.
Por ejemplo, obtendrá un error si proporciona un valor no válido como culture
argumento:
SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
Resultado:
The culture parameter 'Mars' provided in the function call is not supported.
Algunas notas sobre estas funciones
Estos son algunos puntos que Microsoft tiene que decir acerca de estas funciones:
- Se recomienda que utilice
PARSE()
yTRY_PARSE()
solo para convertir de cadena a tipos de fecha/hora y número. Para otros tipos de datos, useCAST()
oCONVERT()
. - Estas funciones se basan en la presencia de .NET Framework Common Language Runtime (CLR).
- Hay una cierta sobrecarga de rendimiento al analizar el valor de la cadena.
- Estas funciones no serán remotas ya que dependen de la presencia del CLR. Intentar controlar de forma remota una función que requiere CLR provocaría un error en el servidor remoto.