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

Come convertire una stringa in una data/ora in SQL Server utilizzando PARSE()

Se lavori con SQL Server, è probabile che tu abbia utilizzato almeno uno dei CONVERT() o CAST() funzioni per convertire da un tipo di dati a un altro. Se hai mai riscontrato un errore durante il tentativo di convertire una stringa in un tipo di dati data/ora, PARSE() la funzione potrebbe essere ciò di cui hai bisogno.

Ad esempio, se hai una stringa come say, ven, 20 Jul 2018 , il CONVERT() o CAST() le funzioni genereranno un errore. Ma il PARSE() funzione lo gestirà senza problemi.

Il PARSE() La funzione restituisce il risultato di un'espressione, convertito nel tipo di dati richiesto in SQL Server. Quindi puoi usarlo per "tradurre" il valore della tua stringa in un tipo di dati data/ora (come data , data e ora , dataora2 , ecc).

Sintassi

Ecco la sintassi per PARSE() funzione:

PARSE (string_value AS data_type [ USING culture ] )

Dove string_value è il valore che vuoi analizzare, data_type è il tipo di dati in cui vuoi che venga analizzato e culture è un argomento facoltativo che puoi utilizzare per specificare il formato della lingua da utilizzare durante l'analisi della stringa.

Esempio di base

Ecco un esempio di base per dimostrare l'utilizzo.

SELECT PARSE('venerdì 20 luglio 2018' AS datetime2) AS 'Risultato';

Risultato:

+-----------------------------+| Risultato ||---------------||| 20-07-2018 00:00:00.0000000 |+-----------------------------+

Rimuovi la fascia oraria

Nell'esempio precedente, abbiamo specificato che la stringa deve essere analizzata come datetime2 tipo di dati. Questo tipo di dati include la componente temporale con un'elevata precisione. Se non hai bisogno del componente ora, puoi sempre analizzarlo come una data tipo di dati.

Ecco il risultato se specifichiamo una data tipo di dati:

SELECT PARSE('Friday, 20 July 2018' AS date) AS 'Result';

Risultato:

+------------+| Risultato ||------------|| 20-07-2018 |+------------+

Mantieni la parte del tempo, ma con meno precisione

E se lo fai hai bisogno di tempo, ma con meno precisione puoi sempre usare il smalldatetime tipo di dati:

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) AS 'Result';

Risultato:

+---------------------+| Risultato ||----------------------|| 2018-07-20 14:36:00 |+---------------------+

Ma se non è abbastanza preciso, c'è sempre il datetime tipo di dati:

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) AS 'Result';

Risultato:

+-------------------------+| Risultato ||------------|| 2018-07-20 14:35:50.523 |+--------------------------+

Variazioni dell'inserimento della data

Il PARSE() La funzione di solito può calcolare la data che stai cercando di convertire, purché tu la fornisca come una rappresentazione valida del tipo di dati richiesto. Ecco alcuni esempi della data fornita in vari stili:

SELECT PARSE('venerdì 20 luglio 2018' AS data) AS 'Risultato 1', PARSE('venerdì 20 luglio 2018' AS data) AS 'Risultato 2', PARSE('venerdì 20 luglio 2018' AS data) AS 'Risultato 3', PARSE('Ven 20 lug 18' AS data) AS 'Risultato 4';

Risultato:

+------------+------------+------------+------- -----+| Risultato 1 | Risultato 2 | Risultato 3 | Risultato 4 ||------------+------------+------------+------- -----|| 20-07-2018 | 20-07-2018 | 20-07-2018 | 20-07-2018 |+------------+-------------+------------+---- --------+

Tuttavia, non è psichico:

SELECT PARSE('Next Friday' AS date) AS 'Result';

Risultato:

Errore durante la conversione del valore della stringa 'Venerdì successivo' nel tipo di dati data utilizzando le impostazioni cultura ''. 

Aggiungi una cultura

Puoi aggiungere un terzo argomento per specificare in quali impostazioni cultura è formattata la stringa. Ad esempio, se la tua data è 01/06/2018 , potrebbe significare 6 gennaio 2018 o 1 giugno 2018 , a seconda della cultura utilizzata.

Ecco un esempio di specifica delle impostazioni cultura:

SELECT PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US', PARSE('01/06/2018' AS date USING 'en-GB') AS 'en -GB';

Risultato:

+------------+------------+| it-USA | it-IT ||------------+------------|| 2018-01-06 | 01-06-2018 |+------------+------------+

Se non fornisci questo argomento, viene utilizzata la lingua della sessione corrente.

Fornire il giorno della settimana sbagliato

Il PARSE() la funzione è piuttosto intelligente, in quanto, se fornisci il giorno della settimana sbagliato, restituirà un errore.

Quindi, se utilizziamo la stessa data degli esempi precedenti, ma cambiamo il giorno della settimana da venerdì a giovedì, ecco cosa succede:

SELECT PARSE('giovedì, 20 luglio 2018' come data) AS 'Risultato';

Risultato:

Errore durante la conversione del valore della stringa "Thursday, 20 July 2018" nel tipo di dati data utilizzando le impostazioni cultura ''.