I SQL Server kan du bruge CONVERT()
funktion til at konvertere en datoværdi fra én datodatatype til en anden (eller mellem enhver anden datatype for den sags skyld). Det er dog ikke den eneste funktion i T-SQL-værktøjskassen til konvertering mellem datatyper.
CAST()
funktion er en del af ANSI SQL-standarden, og den gør de fleste ting CONVERT()
gør. Så i mange tilfælde har du mulighed for, hvilken af disse funktioner du foretrækker at bruge.
Mange databaseprofessionelle foretrækker CAST()
på grund af det faktum, at det er en del af ANSI SQL-standarden, foretrækker andre dog CONVERT()
på grund af den ekstra funktionalitet, som T-SQL’s implementering tilbyder (såsom at kunne levere en datostil).
Under alle omstændigheder giver denne artikel eksempler på konvertering mellem forskellige datoformater ved hjælp af CAST()
.
Syntaks
Syntaksen ser sådan ud:
CAST ( expression AS data_type [ ( length ) ] )
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
.
Eksempel 1 – Cast SYSDATETIME() som dato
I dette eksempel genererer vi den aktuelle dato/tid med SYSDATETIME()
funktion og cast returværdien som 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, CAST(SYSDATETIME() AS date) AS Converted;
Resultat:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Eksempel 2 – Cast SYSDATETIME() som smalldatetime
I dette eksempel caster vi datoen som en smalldatetime datatype.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Resultat:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Eksempel 3 – Cast SYSDATETIME() som datetime offset
I dette eksempel caster vi datoen som en dato-tidsforskydning datatype.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Resultat:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Eksempel 4 – Cast SYSDATETIME() som tid
Du er ikke begrænset til at vise værdiens datokomponent. Du kan også caste det som et tidspunkt datatype, således at kun tidskomponenten returneres. Sådan:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Resultat:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Eksempel 5 – Cast SYSDATETIMEOFFSET() som dato
Her er et eksempel, der bruger en anden funktion til at generere den oprindelige dato/tidsværdi:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Resultat:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Eksempel 6 – Konvertering 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, CAST(LastEditedWhen AS date) 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 | +-----------------------------+-------------+
Jeg har også skrevet et indlæg, der viser, hvordan man konverterer mellem datoformater ved hjælp af CONVERT()
funktion ved at bruge de samme eksempler som ovenfor.