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

PARSE() vs TRY_PARSE() en SQL Server:¿Cuál es la diferencia?

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()TRY_PARSE() solo para convertir de cadena a tipos de fecha/hora y número. Para otros tipos de datos, use CAST() o CONVERT() .
  • 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.