sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar en sträng till ett datum/tid i SQL Server med CAST()

I SQL Server kan du använda CAST() funktion för att konvertera ett uttryck av en datatyp till en annan. Denna funktion fungerar nästan på samma sätt som CONVERT() funktion, förutom att syntaxen är något annorlunda (och CAST() accepterar inte style argument).

Så om du behöver konvertera en sträng till ett datum-/tidsvärde kan du använda CONVERT() funktionen eller CAST() funktion.

Och om du får ett felmeddelande när du använder dessa två funktioner, PARSE() funktion kan vara precis vad du behöver.

Den här artikeln innehåller exempel som använder CAST() funktion.

Syntax

Syntaxen ser ut så här:

CAST ( expression AS data_type [ ( length ) ] )

Dessa argument definieras enligt följande:

expression
Alla giltiga uttryck.
data_type
Måldatatypen. Detta inkluderar xmlstor och sql_variant . Alias ​​datatyper kan inte användas.
length
Ett valfritt heltal som anger längden på måldatatypen. Standardvärdet är 30 .

Exempel 1 – Konvertera till datatyp

I det här exemplet konverterar vi strängen till ett datum datatyp (vi anger detta genom att använda date som det andra argumentet).

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

Resultat:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Precis som med CONVERT() strängen måste vara i en stil som kan konverteras till den angivna datatypen, annars får du ett felmeddelande:

SELECT CAST('Homer' AS date) AS Result;

Resultat:

Conversion failed when converting date and/or time from character string.

Exempel 2 – Konvertera till datetime-datatyp

I det här exemplet konverterar vi till datetime datatyp:

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

Resultat:

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

Du kan också ange tiden tillsammans med datumet:

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

Resultat:

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

Exempel 3 – Konvertera till datetime2-datatyp

Här konverterar vi till datetime2 datatyp:

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

Resultat:

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

Exempel 4 – Konvertera till datetimeoffset-datatyp

I det här exemplet konverterar vi till datetimeoffset datatyp:

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

Resultat:

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

Exempel 5 – Konvertera till smalldatetime-datatyp

Här konverterar vi till smalldatetime datatyp:

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

Resultat:

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

Exempel 6 – Konvertera till tidsdatatyp

I det här exemplet konverterar vi till tiden datatyp:

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

Resultat:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

I så fall angav vi ett datum men inte en tid, så det kom tillbaka som 00:00:00 . Här är ett annat exempel där vi faktiskt anger en tid:

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

Resultat:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Men om vi lägger till datumet får vi ett felmeddelande (till skillnad från ett tidigare exempel när vi konverterade till datetime ):

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

Resultat:

Conversion failed when converting date and/or time from character string.

Så i det här fallet måste du konvertera till datetime eller smalldatetime .

Exempel 7 – Att utelämna datumet

Om du utelämnar datumet när du konverterar till datetime eller smalldatetime datatyper returnerar den 1900-01-01 som datum:

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

Resultat:

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

Om du föredrar att använda CONVERT() funktion, se dessa strängar till datum/tid CONVERT() exempel med samma exempel som ovan.

Dessutom, som nämnt, om du får ett felmeddelande när du försöker konvertera en sträng till ett datum, prova PARSE() funktion istället. Det kommer att fungera i vissa fall där CAST() gör det inte.


  1. Hur vet man vilken partition som kommer att användas i Postgres hashpartitionering?

  2. Hur man kör flera MySQL-instanser på samma maskin

  3. SQL Server Fuzzy Search med Procent av matchning

  4. org.postgresql.util.PSQLEUndantag:Stora objekt får inte användas i auto-commit-läge