I SQL Server kan du använda CONVERT()
funktion för att konvertera ett uttryck av en datatyp till en annan. Därför, om du behöver konvertera en sträng till ett datum/tid-format, kan den här funktionen hjälpa.
Den här artikeln innehåller exempel för att demonstrera dess användning.
Syntax
Syntaxen ser ut så här:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
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
. style
- Ett heltalsuttryck som anger hur
CONVERT()
funktion kommer att översätta uttryck . För stilvärdet NULL returneras NULL. data_type bestämmer intervallet.
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 första argument).
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Resultat:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Naturligtvis måste strängen vara i en stil som kan konverteras till den angivna datatypen, annars får du ett felmeddelande:
SELECT CONVERT(date, 'Homer') 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 CONVERT(datetime, '20 Dec 2018') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 00:00:00.000 | +-------------------------+
Du kan också ange tiden:
SELECT CONVERT(datetime, '2pm 20 Dec 2018') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 14:00:00.000 | +-------------------------+
Exempel 3 – Konvertera till datetime2-datatyp
I det här exemplet konverterar vi till datetime2 datatyp:
SELECT CONVERT(datetime2, '20 Dec 2018') 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 CONVERT(datetimeoffset, '20 Dec 2018') AS Result;
Resultat:
+------------------------------------+ | Result | |------------------------------------| | 2018-12-20 00:00:00.0000000 +00:00 | +------------------------------------+
Exempel 5 – Konvertera till smalldatetime-datatyp
I det här exemplet konverterar vi till smalldatetime datatyp:
SELECT CONVERT(smalldatetime, '20 Dec 2018') 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 CONVERT(time, '20 Dec 2018') 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 CONVERT(time, '2pm') 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 CONVERT(time, '2pm 20 Dec 2018') 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 CONVERT(datetime, '2pm') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 1900-01-01 14:00:00.000 | +-------------------------+
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 CONVERT()
gör det inte.
Du kanske också vill kolla in CAST()
funktion, som är ett ANSI SQL-standardsätt att konvertera mellan datatyper. Så här konverterar du en sträng till ett datum/tid med CAST()
.