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

Come estrarre o convertire i dati temporali da una stringa in SQL Server

Problema:

Vorresti convertire una stringa contenente una data e un'ora in un valore TIME in SQL Server.

Dobbiamo convertire una stringa contenente il nome, la data e l'ora del giorno della settimana in un valore TIME.

Soluzione 1:

Useremo il PARSE() funzione. Ecco la domanda che scriveresti:

SELECT 
  PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Ecco il risultato:

11:23:11.1134505

Discussione:

Usa PARSE() funzione per convertire una stringa contenente un nome, una data e un'ora del giorno della settimana nel tipo di dati TIME. Questa funzione accetta la stringa da convertire, la parola chiave AS e un nuovo tipo di dati (nel nostro esempio, TIME ). La stringa deve contenere un valore che rappresenta questo tipo di dati. Nel nostro esempio, la stringa 'February 2, 2020 11:23:11.1134505' memorizza un valore temporale.

Si noti che l'ora è solo una parte di questa stringa, che contiene anche il nome del giorno della settimana. Non utilizzare il CONVERT() o CAST() funzioni in questo caso; restituiscono anche un tipo di dati TIME, ma senza il giorno della settimana.

Se stai utilizzando una lingua parlata diversa dalla lingua del server, includi la parola chiave USING e il codice cultura appropriato. Per la lingua polacca, dovresti scrivere:

SELECT 
  PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) 
  AS time_value;

Per ulteriori informazioni sui valori dei parametri delle impostazioni cultura, vedere la documentazione ufficiale di SQL Server.

In questo caso, dovresti usare PARSE() funzione, anche se non ha le migliori prestazioni. Se stai operando su una stringa che rappresenta un valore temporale che non memorizzare dati aggiuntivi (come il nome del giorno della settimana), utilizzare il CASE() funzione. Ecco un esempio.

Soluzione 2:

SELECT 
  CAST('2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Ecco il risultato:

11:23:11.1134505

La stringa contenente la data e l'ora da convertire deve essere nel formato del tipo di dati di data e ora T-SQL. Puoi leggere di più nella documentazione di SQL Server.

Il CAST() la funzione è ANSI SQL Standard e le sue prestazioni sono migliori di CONVERT() o PARSE() .

Infine, puoi anche usare il CONVERT() funzione. Guarda il prossimo esempio.

Soluzione 3:

  SELECT 
  CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') 
  AS time_value;

Il risultato:

11:23:11.1134505

Il CONVERT() La funzione accetta tre argomenti:il nuovo tipo di dati, la stringa da convertire e il formato desiderato (opzionale). Tuttavia, dovresti usare questa funzione solo se devi specificare come formattare i dati di data e ora, perché le sue prestazioni non sono buone come CAST() .