I SQL Server kan du använda CONVERT()
funktion för att konvertera ett datumvärde från en datumdatatyp till en annan (eller mellan någon annan datatyp för den delen). Det är dock inte den enda funktionen i T-SQL-verktygslådan för att konvertera mellan datatyper.
CAST()
funktion är en del av ANSI SQL-standarden och den gör det mesta CONVERT()
gör. Så i många fall har du möjlighet att välja vilken av dessa funktioner du föredrar att använda.
Många databasproffs föredrar CAST()
på grund av det faktum att det är en del av ANSI SQL-standarden, men andra föredrar CONVERT()
på grund av den extra funktionalitet som T-SQL:s implementering erbjuder (som att kunna tillhandahålla en datumstil).
I alla fall ger den här artikeln exempel på konvertering mellan olika datumformat med CAST()
.
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 – Kasta SYSDATETIME() som datum
I det här exemplet genererar vi aktuellt datum/tid med SYSDATETIME()
funktion och cast returvärdet som ett datum datatyp.
Observera att SYSDATETIME()
genererar sitt värde som en datetime2(7) datatyp, så vi konverterar den från den datatypen till en annan datatyp.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Resultat:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Exempel 2 – Kasta SYSDATETIME() som smalldatetime
I det här exemplet castar vi datumet som en smalldatetime datatyp.
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 | +-----------------------------+---------------------+
Exempel 3 – Kasta SYSDATETIME() som datumtidsförskjutning
I det här exemplet castar vi datumet som en datetimeoffset datatyp.
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 | +-----------------------------+------------------------------------+
Exempel 4 – Cast SYSDATETIME() som tid
Du är inte begränsad till att visa värdets datumkomponent. Du kan också casta det som en tid datatyp, så att endast tidskomponenten returneras. Så här:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Resultat:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Exempel 5 – Kasta SYSDATETIMEOFFSET() som datum
Här är ett exempel som använder en annan funktion för att generera det ursprungliga datum-/tidsvärdet:
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 | +------------------------------------+----------------------+
Exempel 6 – Konvertering från en databasfråga
Här är ett exempel på att konvertera datumet som har hämtats från en kolumn i WideWorldImporters exempeldatabas:
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 | +-----------------------------+-------------+
Jag har också skrivit ett inlägg som visar hur man konverterar mellan datumformat med CONVERT()
funktion med samma exempel som ovan.