In SQL Server, il PARSE()
e TRY_PARSE()
le funzioni vengono utilizzate per convertire un valore in un altro tipo di dati. Essenzialmente fanno la stessa cosa, con un'eccezione; come gestiscono gli errori.
Se PARSE()
non riesce quando si tenta di analizzare un tipo di dati diverso, restituirà un errore. Se TRY_PARSE()
fallisce, restituirà NULL
.
Esempio 1 – Innanzitutto, le Somiglianze
Ecco un esempio che mostra come entrambe le funzioni restituiscono lo stesso risultato quando possono analizzare correttamente il valore nel tipo di dati richiesto:
SELECT PARSE('Fri, 8 June 2018' AS date) AS PARSE, PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;
Risultato:
+------------+-------------+ | PARSE | TRY_PARSE | |------------+-------------| | 2018-06-08 | 2018-06-08 | +------------+-------------+
Come previsto, entrambi restituiscono esattamente lo stesso risultato.
Ma vediamo cosa succede quando non sono in grado di analizzare il valore nel tipo di dati richiesto.
Esempio 2 – Quando PARSE() fallisce
Ecco un esempio di cosa succede quando PARSE()
non è in grado di analizzare un valore in un altro valore:
SELECT PARSE('Next year' AS date) AS Result;
Risultato:
Error converting string value 'Next year' into data type date using culture ''.
L'operazione non riesce perché non ho fornito una rappresentazione valida del tipo di dati richiesto. In altre parole, PARSE()
impossibile convertire Next year
in una data tipo di dati come richiesto.
Esempio 3 – Quando TRY_PARSE() fallisce
Ecco un esempio quando proviamo ad analizzare lo stesso valore con TRY_PARSE()
:
SELECT TRY_PARSE('Next year' AS date) AS Result;
Risultato:
+----------+ | Result | |----------| | NULL | +----------+
L'analisi non riesce ancora, ma restituisce NULL
invece di un errore.
Esempio 4 – Utilizzo di TRY_PARSE() con un'istruzione condizionale
Possiamo prendere TRY_PARSE()
e testa il suo valore di ritorno. Se è un valore NULL, possiamo restituire una cosa, se è un valore non NULL, possiamo restituirne un altro:
SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Risultato:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Esempio 5 – TRY_PARSE() con errore
Solo perché TRY_PARSE()
non comporta un errore negli esempi precedenti, non significa che mai risulta in un errore. Ci sono momenti in cui è ancora possibile ricevere un errore durante l'utilizzo di questa funzione.
Ad esempio, riceverai un errore se fornisci un valore non valido come culture
argomento:
SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
Risultato:
The culture parameter 'Mars' provided in the function call is not supported.
Alcune note su queste funzioni
Ecco alcuni punti che Microsoft ha da dire su queste funzioni:
- Si consiglia di utilizzare
PARSE()
eTRY_PARSE()
solo per la conversione da stringa a data/ora e tipi numerici. Per altri tipi di dati, usaCAST()
oCONVERT()
. - Queste funzioni si basano sulla presenza di .NET Framework Common Language Runtime (CLR).
- C'è un certo sovraccarico di prestazioni nell'analisi del valore della stringa.
- Queste funzioni non saranno remote poiché dipendono dalla presenza del CLR. Il tentativo di eseguire in remoto una funzione che richiede il CLR causerebbe un errore sul server remoto.