I SQL Server kan du bruge CONVERT()
funktion til at konvertere et udtryk af en datatype til en anden. Derfor, hvis du har brug for at konvertere en streng til et dato/tidsformat, kan denne funktion hjælpe.
Denne artikel indeholder eksempler for at demonstrere dets brug.
Syntaks
Syntaksen ser sådan ud:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Disse argumenter er defineret som følger:
expression
- Ethvert gyldigt udtryk.
data_type
- Måldatatypen. Dette inkluderer xml , bigt , og sql_variant . Aliasdatatyper kan ikke bruges.
length
- Et valgfrit heltal, der angiver længden af måldatatypen. Standardværdien er
30
. style
- Et heltalsudtryk, der specificerer, hvordan
CONVERT()
funktion vil oversætte udtryk . For en stilværdi på NULL, returneres NULL. data_type bestemmer området.
Eksempel 1 – Konverter til datodatatype
I dette eksempel konverterer vi strengen til en dato datatype (vi angiver dette ved at bruge date
som det første argument).
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Resultat:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Selvfølgelig skal strengen være i en stil, der kan konverteres til den angivne datatype, ellers får du en fejlmeddelelse:
SELECT CONVERT(date, 'Homer') AS Result;
Resultat:
Conversion failed when converting date and/or time from character string.
Eksempel 2 – Konverter til datetime-datatype
I dette eksempel konverterer vi til datetime datatype:
SELECT CONVERT(datetime, '20 Dec 2018') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 00:00:00.000 | +-------------------------+
Du kan også angive tidspunktet:
SELECT CONVERT(datetime, '2pm 20 Dec 2018') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 14:00:00.000 | +-------------------------+
Eksempel 3 – Konverter til datetime2-datatype
I dette eksempel konverterer vi til datetime2 datatype:
SELECT CONVERT(datetime2, '20 Dec 2018') AS Result;
Resultat:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
Eksempel 4 – Konverter til datetimeoffset-datatype
I dette eksempel konverterer vi til datetime offset datatype:
SELECT CONVERT(datetimeoffset, '20 Dec 2018') AS Result;
Resultat:
+------------------------------------+ | Result | |------------------------------------| | 2018-12-20 00:00:00.0000000 +00:00 | +------------------------------------+
Eksempel 5 – Konverter til smalldatetime-datatype
I dette eksempel konverterer vi til smalldatetime datatype:
SELECT CONVERT(smalldatetime, '20 Dec 2018') AS Result;
Resultat:
+---------------------+ | Result | |---------------------| | 2018-12-20 00:00:00 | +---------------------+
Eksempel 6 – Konverter til tidsdatatype
I dette eksempel konverterer vi til tiden datatype:
SELECT CONVERT(time, '20 Dec 2018') AS Result;
Resultat:
+----------+ | Result | |----------| | 00:00:00 | +----------+
I så fald specificerede vi en dato, men ikke et klokkeslæt, så det kom tilbage som 00:00:00
. Her er et andet eksempel, hvor vi faktisk angiver et tidspunkt:
SELECT CONVERT(time, '2pm') AS Result;
Resultat:
+----------+ | Result | |----------| | 14:00:00 | +----------+
Men hvis vi tilføjer datoen, får vi en fejl (i modsætning til et tidligere eksempel, hvor vi konverterede til datotid ):
SELECT CONVERT(time, '2pm 20 Dec 2018') AS Result;
Resultat:
Conversion failed when converting date and/or time from character string.
Så i dette tilfælde skal du konvertere til datetime eller smalldatetime .
Eksempel 7 – Udeladelse af dato
Hvis du udelader datoen, mens du konverterer til datetime eller smalldatetime datatyper, returnerer den 1900-01-01
som datoen:
SELECT CONVERT(datetime, '2pm') AS Result;
Resultat:
+-------------------------+ | Result | |-------------------------| | 1900-01-01 14:00:00.000 | +-------------------------+
Hvis du får en fejl, mens du prøver at konvertere en streng til en dato, så prøv PARSE()
funktion i stedet for. Det vil fungere i nogle tilfælde, hvor CONVERT()
gør det ikke.
Du vil måske også tjekke CAST()
funktion, som er en ANSI SQL standard måde at konvertere mellem datatyper på. Her er hvordan man konverterer en streng til en dato/tid ved hjælp af CAST()
.