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()
).