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

Cómo funciona TRY_CONVERT() en SQL Server

En SQL Server, el TRY_CONVERT() La función es muy similar a CONVERT() función, excepto que TRY_CONVERT() no devuelve un error si falla la conversión (CONVERT() hace).

En su lugar, el TRY_CONVERT() la función devuelve NULL si la conversión no tiene éxito.

Sin embargo, hay algunas ocasiones en las que TRY_CONVERT() devolverá un error.

Sintaxis

La sintaxis es así:

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

Donde expression es la expresión a convertir, data_type es el nuevo tipo de datos y length es una longitud opcional para el nuevo tipo de datos.

El style opcional El argumento se puede usar para especificar cómo la función debe traducir la expression argumento. Por ejemplo, podría usar este argumento para especificar el formato de fecha.

Ejemplo 1:la conversión se realiza correctamente

Aquí hay un ejemplo de cómo convertir una cadena a decimal:

SELECT TRY_CONVERT(DECIMAL(5,2), '007');

Resultado:

7.00

En este caso, la conversión se realizó correctamente.

Ejemplo 2:la conversión falla y devuelve NULL

Aquí hay un ejemplo de la conversión que falla y NULL siendo devuelto:

SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');

Resultado:

NULL

La conversión falló, por lo que NULL fue devuelto.

A modo de comparación, esto es lo que sucede cuando usamos CONVERT() en lugar de TRY_CONVERT() :

SELECT CONVERT(DECIMAL(5,2), 'Three');

Resultado:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Ejemplo 3:la conversión falla y devuelve un error

Hay algunas ocasiones en las que TRY_CONVERT() devolverá un error.

Si no se permite explícitamente una conversión, devuelve un error:

SELECT TRY_CONVERT(xml, 10);

Resultado:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to xml is not allowed.

Ejemplo 4:el style Argumento

Podemos usar el style opcional argumento para especificar cómo debe traducirse la expresión.

Ejemplo:

SET LANGUAGE British;
SELECT 
    TRY_CONVERT(date, '09/02/2030') AS "British",
    TRY_CONVERT(date, '09/02/2030', 101) AS "US",
    TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
    TRY_CONVERT(date, '20300902', 112) AS "ISO",
    TRY_CONVERT(date, '09.02.2030', 104) AS "German";

Resultado:

Changed language setting to British.
+------------+------------+--------------+------------+------------+
| British    | US         | US (short)   | ISO        | German     |
|------------+------------+--------------+------------+------------|
| 2030-02-09 | 2030-09-02 | 2030-09-02   | 2030-09-02 | 2030-02-09 |
+------------+------------+--------------+------------+------------+

Aquí, configuro mi idioma en British , luego ejecutó TRY_CONVERT() varias veces, cada una con un style diferente argumento (excepto el primero, que usa el idioma predeterminado de mi sesión:británico).

Podemos ver que el argumento de estilo afecta cómo se traduce la expresión.

Más información

Ver CONVERT() en SQL Server para obtener más ejemplos de conversión y CONVERT() frente a TRY_CONVERT() en SQL Server para una comparación entre CONVERT() y TRY_CONVERT() .

Consulte la documentación de Microsoft para CAST() y CONVERT() para obtener información más detallada (la mayor parte también se aplica a TRY_CONVERT() ).