Soms krijg je bij het werken met databases en andere programmeeromgevingen een datumwaarde, maar deze is in het verkeerde formaat/gegevenstype. Als een datum bijvoorbeeld is gegenereerd met een ingebouwde datumfunctie, kan deze zowel de datum als de tijd bevatten, tot op de laatste nanoseconde. En alles wat je wilt is de dag, de maand en het jaar, zeg zo:01-01-2018.
Als dit gebeurt terwijl u SQL Server gebruikt, kunt u de CONVERT()
gebruiken functie om het naar een ander gegevenstype te converteren. Wanneer u dit doet, bepaalt het gegevenstype het formaat waarin het wordt weergegeven.
Dit artikel geeft voorbeelden van het gebruik van de CONVERT()
functie in SQL Server om een datumwaarde om te zetten naar een ander (datum)gegevenstype.
Syntaxis
Ten eerste, hier is hoe de officiële syntaxis werkt:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Deze argumenten worden als volgt gedefinieerd:
expression
- Elke geldige uitdrukking.
data_type
- Het doelgegevenstype. Dit omvat xml , groot , en sql_variant . Alias-gegevenstypen kunnen niet worden gebruikt.
length
- Een optioneel geheel getal dat de lengte van het doelgegevenstype aangeeft. De standaardwaarde is
30
. style
- Een integer-expressie die specificeert hoe de
CONVERT()
functie vertaalt uitdrukking . Voor een stijlwaarde NULL wordt NULL geretourneerd. data_type bepaalt het bereik.
Voorbeeld 1 – Converteren van SYSDATETIME() naar datumgegevenstype
In dit voorbeeld genereren we de huidige datum/tijd met de SYSDATETIME()
functie en converteer dat naar een datum gegevenstype.
Merk op dat de SYSDATETIME()
genereert zijn waarde als een datetime2(7) gegevenstype, dus we converteren het van dat gegevenstype naar een ander gegevenstype.
SELECT SYSDATETIME() AS Original, CONVERT(date, SYSDATETIME()) AS Converted;
Resultaat:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Voorbeeld 2 – Converteren van SYSDATETIME() naar datatype smalldatetime
In dit voorbeeld converteren we de datum naar een smalldatetime gegevenstype.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Resultaat:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Voorbeeld 3 – Converteren van SYSDATETIME() naar datatimeoffset datatype
In dit voorbeeld converteren we de datum naar een datetimeoffset gegevenstype.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Resultaat:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Voorbeeld 4 – Converteren van SYSDATETIME() naar datatype tijd
U bent niet beperkt tot het weergeven van de datumcomponent van de waarde. Je kunt het ook converteren naar een tijd gegevenstype, zodat alleen de tijdcomponent wordt geretourneerd. Zoals dit:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Resultaat:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Voorbeeld 5 – Converteren van SYSDATETIMEOFFSET()
De vorige voorbeelden gebruiken allemaal dezelfde ingebouwde functie om de datum/tijd-waarde te genereren, maar deze hoeft natuurlijk niet door deze ene functie te worden gegenereerd. Hier is een voorbeeld met de SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Resultaat:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Voorbeeld 6 – Converteren vanuit een databasequery
Hier is een voorbeeld van het converteren van de datum die is opgehaald uit een kolom in de voorbeelddatabase van WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) AS 'Converted' FROM Sales.CustomerTransactions;
Resultaat:
+-----------------------------+-------------+ | 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 | +-----------------------------+-------------+
Merk op dat u niet beperkt bent tot het converteren tussen twee verschillende datumnotaties. Als u bijvoorbeeld een datum als tekenreeks heeft opgeslagen, kunt u ook CONVERT()
gebruiken om van een tekenreeks naar een datum te converteren, evenals elk ander gegevenstype waarnaar u mogelijk moet converteren.
Ik heb ook een bericht geschreven dat laat zien hoe je kunt converteren tussen datumnotaties met behulp van de CAST()
functie met dezelfde voorbeelden als hierboven.