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

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

In SQL Server puoi utilizzare CAST() funzione per convertire un'espressione di un tipo di dati in un altro. Questa funzione funziona quasi allo stesso modo di CONVERT() funzione, tranne per il fatto che la sintassi è leggermente diversa (e CAST() non accetta lo style argomento).

Quindi, se hai bisogno di convertire una stringa in un valore di data/ora, puoi usare CONVERT() o la funzione CAST() funzione.

E se ricevi un errore durante l'utilizzo di queste due funzioni, PARSE() la funzione potrebbe essere proprio ciò di cui hai bisogno.

Questo articolo contiene esempi che utilizzano CAST() funzione.

Sintassi

La sintassi è questa:

CAST ( espressione AS tipo_dati [ ( lunghezza ) ] )

Questi argomenti sono definiti come segue:

expression
Qualsiasi espressione valida.
data_type
Il tipo di dati di destinazione. Ciò include xmlgrandesql_variant . Non è possibile utilizzare tipi di dati alias.
length
Un numero intero facoltativo che specifica la lunghezza del tipo di dati di destinazione. Il valore predefinito è 30 .

Esempio 1 – Converti in data Tipo di dati

In questo esempio, convertiamo la stringa in una data tipo di dati (lo specifichiamo usando date come secondo argomento).

SELECT CAST('20 Dec 2018' AS data) AS Risultato;

Risultato:

+------------+| Risultato ||------------|| 20-12-2018 |+------------+

Proprio come con CONVERT() la stringa deve essere in uno stile che può essere convertito nel tipo di dati specificato, altrimenti riceverai un errore:

SELECT CAST('Homer' AS data) AS Risultato;

Risultato:

Conversione non riuscita durante la conversione di data e/o ora dalla stringa di caratteri.

Esempio 2:conversione in tipo di dati datetime

In questo esempio convertiamo in datetime tipo di dati:

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Risultato:

+-------------------------+| Risultato ||------------|| 20-12-2018 00:00:00.000 |+--------------------------+

Puoi anche specificare l'ora insieme alla data:

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Risultato:

+-------------------------+| Risultato ||------------|| 2018-12-20 14:00:00.000 |+--------------------------+

Esempio 3:conversione in tipo di dati datetime2

Qui convertiamo in datetime2 tipo di dati:

SELECT CAST('20 Dec 2018' AS datetime2) AS Risultato;

Risultato:

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

Esempio 4:conversione in tipo di dati datetimeoffset

In questo esempio convertiamo in datetimeoffset tipo di dati:

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Risultato;

Risultato:

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

Esempio 5:conversione in tipo di dati smalldatetime

Qui convertiamo in smalldatetime tipo di dati:

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Risultato:

+---------------------+| Risultato ||----------------------|| 20-12-2018 00:00:00 |+----------------------+

Esempio 6:conversione in tipo di dati temporali

In questo esempio convertiamo il tempo tipo di dati:

SELECT CAST('20 Dec 2018' AS time) AS Risultato;

Risultato:

+----------+| Risultato ||----------|| 00:00:00 |+----------+

In tal caso, abbiamo specificato una data ma non un'ora, quindi è tornato come 00:00:00 . Ecco un altro esempio in cui specifichiamo effettivamente un'ora:

SELECT CAST('2pm' AS time) AS Risultato;

Risultato:

+----------+| Risultato ||----------|| 14:00:00 |+----------+

Ma se aggiungiamo la data, otteniamo un errore (a differenza di un esempio precedente quando abbiamo convertito in datetime ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Risultato;

Risultato:

Conversione non riuscita durante la conversione di data e/o ora dalla stringa di caratteri.

Quindi in questo caso dovresti convertire in datetime o smalldatetime .

Esempio 7 – Omissione della data

Se ometti la data durante la conversione in datetime o smalldatetime tipi di dati, restituirà 1900-01-01 come data:

SELECT CAST('2pm' AS datetime) AS Risultato;

Risultato:

+-------------------------+| Risultato ||------------|| 1900-01-01 14:00:00.000 |+--------------------------+

Se preferisci usare per usare CONVERT() funzione, guarda queste stringhe a data/ora CONVERT() esempi usando gli stessi esempi di cui sopra.

Inoltre, come accennato, se ricevi un errore mentre provi a convertire una stringa in una data, prova PARSE() funzione invece. Funzionerà in alcuni casi in cui CAST() no.