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 xml , stor 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.