Home / T-SQL / Rekenen met datums

Rekenen met datums

Rekenen met datums kan in SQL Server 2005 op verschillende manieren. SQL Server 2005 kent verschillende functies die je kunt gebruiken als je met datums gaat werken. Dit artikel beschrijft een aantal praktische voorbeelden die je in de praktijk zult tegenkomen als je met databases en datums werkt.

Zo wordt beschreven hoe je terug kunt rekenen in de tijd, hoe je het verschil in dagen tussen diverse datums kunt uitrekenen en hoe je de maand kunt bepalen in een datum.

DATEADD()

Deze functie gebruik je om een datum te bepalen die voor of na de opgegeven datum ligt. Je wilt bijvoorbeeld weten wat de datum is die 2 maanden na vandaag ligt of je wilt de datum weten die twee dagen voor 1 augustus ligt.
Syntax
DateAdd(datumgedeelte, getal, datumwaarde)Voorbeelden
De datum van overmorgen
SELECT DATEADD(dd, 2, GETDATE () )

In bovenstaand voorbeeld zeggen we dat hij in dagen moet rekenen (dd), de 2 geeft aan dat hij 2 dagen vooruit moet rekenen. Het derde argument geeft de datum vanaf wanneer hij moet rekenen, in dit geval vandaag (GETDATE() ). Bij GETGATE() kun je ook een datum meegeven, bijvoorbeeld ‘2008-12-05’ . Let op dat dit tussen quotes moet staan!

De datum van twee maanden geleden

SELECT DATEADD(mm, -2, GETDATE () )

mm geeft maanden aan. -2 geeft aan dat hij 2 maanden terug moet gaan en de GETDATE() geeft de datum van vandaag aan.

DATEPART()

Met deze functie kun je de dag, maand, jaar en tijd bepalen in een datumwaarde. Je wilt het maandgedeelte van de datum 2008-12-05 hebben, in dit geval dus 12. Je kunt ook de dag nodig hebben van 12 augustus 2007, de 12 dus.

Syntax
DatePart(datumgedeelte, datumwaarde)

Voorbeelden

De dag van vandaag

SELECT DATEPART(dd,GETDATE() )

Het jaarnummer van vandaag

SELECT DATEPART(yy,GETDATE() )

DATEDIFF()

Datediff gebruik je om een interval te berekenen tussen twee datums. Zo kun je het aantal dagen bepalen dat tussen twee datums ligt.

Syntax

DateDiff(datumgedeelte, datumwaarde1, datumwaarde2)

Voorbeelden

Het aantal dagen verschil tussen 1 december 2008 en vandaag (5 december 2008)

SELECT DATEDIFF(dd,'2008-12-01',GETDATE() )

DATENAME()

Datename lijkt erg op datepart. Het verschil is dat deze functie een string retourneerd (stukje tekst) en datepart retourneerd een nummer. Deze functie kan de dag van de week in tekst retourneren of de naam van de maand.

Syntax

DateName(datumgedeelte, datumwaarde)VoorbeeldenDe dagnaam van vandaag

SELECT DATENAME (dw, GETDATE() )

Het dagnummer van het jaar van vandaag

SELECT DATENAME (dy, GETDATE() )

Hieronder een tabel met waarden die je kunt invoeren als eerste argument:

Een beperking van de functie is dat de functie de engelse namen retourneerd. Ik raad daarom aan altijd gebruik te maken van een datumdimensie. Het grote voordeel van een datumdimensie is dat je voor iedere datum weet in welke week hij valt, welk jaar, welk kwartaal, etc. Daarbij moet je er rekening mee houden dat 1 januari in week 52 van het vorige jaar kan vallen. Het jaar van 1 januari is in dit geval bijvoorbeeld 2008 maar het jaar van het weeknummer is 2007.

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, …

2 comments

  1. Hallo,

    Ik ben op zoek naar een functie die het aantal werkdagen aangeeft tussen 2 datums. De workweek is van maandag tm vrijdag dus zaterdag en zondag tellen niet mee.

    Wie kan mij helpen?

    • Deze functie kan je gebruiken maar dan heb je wel een datum tabel nodig:

      USE [DWH_NL_DMSA_1]
      GO

      /****** Object: UserDefinedFunction [dbo].[DateDiffWorkDays] Script Date: 10-2-2017 12:18:42 ******/
      SET ANSI_NULLS ON
      GO

      SET QUOTED_IDENTIFIER ON
      GO

      CREATE FUNCTION [dbo].[DateDiffWorkDays]
      ( @StartDateID INT, @EndDateID INT, @IncludeHolidays BIT = 0 )

      —————————————————
      — Name : [dbo].[DateDiffWorkDays]
      — Produced By : XXX
      — URL : XXX
      — Author : XXX
      — Date : 6 Juni 2012
      — Modified : XXX
      — Modfied by : XXX
      — Purpose : Calculate business days between two days.
      — Called by : Different SQL
      — Description :

      — EXAMPLE :
      — SELECT dbo.DateDiffWorkDays(‘2012-05-23′,’2012-05-31’,0)
      ————————————————————

      RETURNS INT

      AS

      BEGIN

      DECLARE @NrOfDays INT

      SELECT @NrOfDays = COUNT(*)
      FROM dbo.DimDatum AS DD
      WHERE DD.DatumID BETWEEN @StartDateID AND @EndDateID
      AND IsWerkDag= 1
      AND ( @IncludeHolidays = 1
      OR IsFeestDag_PS = 0)

      RETURN ( @NrOfDays )
      END

      GO

Geef een reactie

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