Potresti aver notato che T-SQL include sia un CONVERT()
funzione e un TRY_CONVERT()
funzione che è possibile utilizzare in SQL Server per eseguire conversioni tra tipi di dati. Ma se ti stai scervellando su quale sia la differenza tra queste due funzioni, continua a leggere!
La differenza tra CONVERT()
e TRY_CONVERT()
è nel modo in cui gestiscono i tipi di dati che non possono essere convertiti. Uno genera un errore, mentre l'altro restituisce null. Gli esempi seguenti lo dimostrano.
La funzione CONVERT()
Per prima cosa, diamo un'occhiata a cosa è il CONVERT()
funzione fa. Converte un tipo di dati in un altro. Ecco un esempio:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Risultato:
Result ----------- Comments: 9
In questo esempio, convertiamo un int
valore a varchar(12)
. E poiché è stato possibile convertire il valore nel tipo e nella lunghezza di dati desiderati, ha funzionato perfettamente.
Tuttavia, mentre funziona perfettamente quando la conversione riesce, cosa succede quando fallisce?
Quando la conversione non riesce → Errore
Modifichiamo un po' il codice e vediamo cosa succede quando la conversione non riesce:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Error: Arithmetic overflow error converting numeric to data type varchar.
Viene visualizzato un errore.
La funzione TRY_CONVERT()
Il TRY_CONVERT()
è un'alternativa che possiamo utilizzare per prevenire il messaggio di errore. Questa funzione esegue la stessa operazione di conversione dei dati di CONVERT()
, tuttavia, se questa funzione non può eseguire la conversione, restituisce null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Result ------ null
Puoi prendere questo risultato e applicare il codice condizionale in modo che accada qualcosa di diverso a seconda che la conversione abbia esito positivo o meno.
Esempio:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Risultato:
Result ----------------- Conversion failed
Tipi di dati non validi
Un avvertimento con TRY_CONVERT()
è che funziona in questo modo solo quando si utilizzano tipi di dati validi. Quindi riceverai un errore se fornisci esplicitamente un tipo di dati non consentito.
Esempio:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Risultato:
Error: Type Homer is not a defined system type.