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

PARSE() vs TRY_PARSE() in SQL Server:qual è la differenza?

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()TRY_PARSE() solo per la conversione da stringa a data/ora e tipi numerici. Per altri tipi di dati, usa CAST() o CONVERT() .
  • 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.