Conversie van datetime naar date in SQL
In SQL Server kun je een datumveld met type ‘datetime’ omzetten naar type ‘date’. Bij het type date wordt alleen de datum opgeslagen in de database, terwijl bij het type datetime zowel de datum als de tijd worden opgeslagen. We gebruiken onderstaande tabel met een kolom ‘Datum’ die het type datetime heeft.
Open SQL Server Management Studio. Om een datumveld om te zetten naar type date kun je onderstaande SQL query gebruiken. Het type date bestaat sinds SQL Server 2008. We gebruiken de functie CAST in de SELECT statement voor de conversie van datetime naar date. Vervolgens geven we de nieuwe kolom een naam door middel van AS <kolomnaam>.
CAST (Datum as Date) as Datum
FROM TestTabel
[/sql]
Als resultaat zien we de oude kolom ‘DatumTijd’ met het type datetime en de nieuwe kolom ‘Datum’ met type date.
Tot en met SQL Server 2005 bestond het type date nog niet. Toch is het in deze versie ook mogelijk om in een datumveld de tijd niet mee te nemen. De eerste stap is om de datum om te zetten naar een getal. Iedere datum heeft een bepaald getal. In SQL Server wordt het getal berekend door het verschil in het aantal dagen te berekenen tussen de datum en 01-01-1900. Omdat in het type datetime ook de tijd wordt opgeslagen kan er een decimaal getal ontstaan. Het kan bijvoorbeeld zijn dat de tijd 12:00 uur is waardoor je op de helft van de dag bent. Er wordt dan 0,5 aan het getal toegevoegd. Daarom zetten we de datum om naar het type float. Hiervoor gebruiken we onderstaande query.
CAST (Datum AS Float) AS Datum
FROM TestTabel
[/sql]
Onderstaand zie je het resultaat.
Vervolgens ronden we het getal af naar beneden zodat de tijd niet meer wordt meegenomen in het getal. Hiervoor gebruiken we de functie FLOOR. Dit doen we met onderstaande query.
FLOOR(CAST( Datum AS Float)) AS Datum
FROM TestTabel
[/sql]
Onderstaand zie je het resultaat. Er zijn nu alleen nog hele getallen.
Vervolgens zetten we het getal weer om naar type datetime. Hiervoor gebruiken we de functie CAST en gebruiken we AS <type> met als type datetime. Onderstaand zie je de uiteindelijke query.
CAST (FLOOR(CAST( Datum AS Float)) AS Datetime) AS Datum
FROM TestTabel
[/sql]
Dit is het resultaat. Bij iedere datum staat de tijd nu op 00:00:00.000.
Zelf proberen
Wil je zelf experimenteren met de dataset? Gebruik dan onderstaande SQL queries. Je kunt de queries kopiëren en plakken.Tabel maken:
[sql]
CREATE TABLE TestTabel
(
ID INT NOT NULL,
Datum DATETIME
)
[/sql]
Tabel vullen:
[sql]
INSERT INTO TestTabel (ID, Datum)
VALUES (1, ‘2014-09-05 09:58:22.000’),
VALUES (2, ‘2014-05-04 14:27:57.153’),
VALUES (3, ‘2014-12-31 07:034:00.000’)
[/sql]
Geef een reactie