Nogle gange, når du arbejder med databaser og andre programmeringsmiljøer, får du en datoværdi, men den er i det forkerte format/datatype. For eksempel, hvis en dato er blevet genereret med en indbygget datofunktion, kan den inkludere både datoen og klokkeslættet, helt ned til det sidste nanosekund. Og alt hvad du ønsker er dagen, måneden og året, sig sådan her:2018-01-01.
Hvis dette sker, mens du bruger SQL-serveren, kan du bruge CONVERT()
funktion til at konvertere den til en anden datatype. Når du gør dette, bestemmer datatypen det format, den vises som.
Denne artikel giver eksempler på brug af CONVERT()
funktion i SQL Server til at konvertere en datoværdi til en anden (dato) datatype.
Syntaks
For det første, her er, hvordan den officielle syntaks går:
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 fra SYSDATETIME() til datodatatype
I dette eksempel genererer vi den aktuelle dato/tid med SYSDATETIME()
funktion og konverter det til en dato datatype.
Bemærk, at SYSDATETIME()
genererer sin værdi som en datetime2(7) datatype, så vi konverterer den fra den datatype til en anden datatype.
SELECT SYSDATETIME() AS Original, CONVERT(date, SYSDATETIME()) AS Converted;
Resultat:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Eksempel 2 – Konverter fra SYSDATETIME() til smalldatetime-datatype
I dette eksempel konverterer vi datoen til en smalldatetime datatype.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Resultat:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Eksempel 3 – Konverter fra SYSDATETIME() til datetimeoffset datatype
I dette eksempel konverterer vi datoen til en datotidsforskydning datatype.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Resultat:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Eksempel 4 – Konverter fra SYSDATETIME() til tidsdatatype
Du er ikke begrænset til at vise værdiens datokomponent. Du kan også konvertere det til et tidspunkt datatype, således at kun tidskomponenten returneres. Sådan:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Resultat:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Eksempel 5 – Konverter fra SYSDATETIMEOFFSET()
De foregående eksempler bruger alle den samme indbyggede funktion til at generere dato/tidsværdien, men den behøver selvfølgelig ikke at blive genereret af denne ene funktion. Her er et eksempel, der bruger SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Resultat:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Eksempel 6 – Konverter fra en databaseforespørgsel
Her er et eksempel på konvertering af datoen, der er hentet fra en kolonne i WideWorldImporters eksempeldatabase:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) AS 'Converted' FROM Sales.CustomerTransactions;
Resultat:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Bemærk, at du ikke er begrænset til kun at konvertere mellem to forskellige datoformater. Hvis du f.eks. har en dato gemt som en streng, kan du også bruge CONVERT()
at konvertere fra en streng til en dato, såvel som enhver anden datatype, du muligvis skal konvertere til.
Jeg har også skrevet et indlæg, der viser, hvordan man konverterer mellem datoformater ved hjælp af CAST()
funktion ved at bruge de samme eksempler som ovenfor.