Home / T-SQL / Datum omzetten naar een Integer

Datum omzetten naar een Integer

In Datawarehouseland gebruiken we in onze Datum-Dimensie integers als primaire sleutels voor de datum. Zo slaan we de datum “2008-12-01 00:00:00.000” op als  “20081201”. Hierdoor kun je vanuit je feitentabel een snelle join leggen naar je datumdimensie, joins op integers gaan nou eenmaal sneller dan joins op datetime velden. 

Datum omzetten naar een Integer

Datums liggen in bronsystemen vaak opgeslagen in het DateTime-formaat. We zullen deze DateTime dus moeten converteren naar een integer. Dit kan met het volgende T-SQL Statement:

SELECT YEAR(GETDATE())*10000+MONTH(GETDATE())*100+DAY(GETDATE()) AS DatetimeToInt

GETDATE() vervang je door het datumveld dat je wilt omzetten naar een integer.

 

De beste manier die ik de laatste tijd steeds vaker gebruik is echter deze. Dit truukje zet een datum snel om in een integer.

SELECT CONVERT(VARCHAR, GETDATE(), 112)

Datum omzetten naar integer
Je kunt je ook voorstellen dat je dit veld weer wilt gebruiken als een normaal datumveld, bijvoorbeeld in een rapportage in Reporting Services. Dit raad ik af omdat functies erg langzaam zijn, vooral bij grote datasets. Dit komt doordat een functie iedere rij van een dataset afloopt. Eventueel kun je dit vrij eenvoudig realiseren door onderstaande functie aan te maken:

CREATE FUNCTION [dbo].[FromDateIDtoDateValue](@Date varchar(8))
RETURNS datetime
AS
 
DECLARE @FunctionResult datetime
 
IF isdate(@Date) = 1 SET @FunctionResult = cast(@Date as datetime)
Else SET @FunctionResult = null
 
RETURN(@FunctionResult)
END

Vervolgens kun je deze functie aanroepen:

SELECT
dbo.FromDateIDtoDateValue(20081201)

Check Also

Book Review: Unlocking the Power of DAX: A Deep Dive into Marco Russo’s Definitive Guide

The Definitive Guide to DAX: Business intelligence for Microsoft Power BI, SQL Server Analysis Services, …

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *