Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona TRY_CONVERT() in SQL Server

In SQL Server, il TRY_CONVERT() la funzione è molto simile a CONVERT() funzione, tranne che TRY_CONVERT() non restituisce un errore se la conversione non riesce (CONVERT() fa).

Invece, il TRY_CONVERT() la funzione restituisce NULL se la conversione non riesce.

Ci sono tuttavia alcune occasioni in cui TRY_CONVERT() restituirà un errore.

Sintassi

La sintassi è questa:

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

Dove expression è l'espressione da convertire, data_type è il nuovo tipo di dati e length è una lunghezza opzionale per il nuovo tipo di dati.

Lo style opzionale argomento può essere utilizzato per specificare come la funzione deve tradurre l'expression discussione. Ad esempio, puoi utilizzare questo argomento per specificare il formato della data.

Esempio 1 – Conversione riuscita

Ecco un esempio di conversione di una stringa in decimale:

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

Risultato:

7.00

In questo caso, la conversione è riuscita.

Esempio 2 – Conversione non riuscita e resi NULL

Ecco un esempio di conversione non riuscita e NULL in fase di restituzione:

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

Risultato:

NULL

La conversione non è riuscita, quindi NULL è stato restituito.

A titolo di confronto, ecco cosa succede quando utilizziamo CONVERT() invece di TRY_CONVERT() :

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

Risultato:

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

Esempio 3:la conversione non riesce e restituisce un errore

Ci sono alcune occasioni in cui TRY_CONVERT() restituirà un errore.

Se una conversione non è esplicitamente consentita, restituisce un errore:

SELECT TRY_CONVERT(xml, 10);

Risultato:

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

Esempio 4 – Lo style Argomento

Possiamo usare lo style opzionale argomento per specificare come deve essere tradotta l'espressione.

Esempio:

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";

Risultato:

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 |
+------------+------------+--------------+------------+------------+

Qui, ho impostato la mia lingua su British , quindi esegui TRY_CONVERT() più volte, ciascuna utilizzando un diverso style argomento (tranne il primo, che usa la lingua di default della mia sessione – inglese).

Possiamo vedere che l'argomento di stile influenza il modo in cui l'espressione viene tradotta.

Maggiori informazioni

Vedi CONVERT() in SQL Server per ulteriori esempi di conversione e CONVERT() vs TRY_CONVERT() in SQL Server per un confronto tra CONVERT() e TRY_CONVERT() .

Consulta la documentazione di Microsoft per CAST() e CONVERT() per informazioni più dettagliate (la maggior parte si applica anche a TRY_CONVERT() ).