DateTimeOffset

I denne uge fandt jeg et SQL Statement, med en “ret træls” WHERE del:

    WHERE Year(t.StartDate) = 2024

Det forsøgte at læse hele tabellen, ikke kun rækkerne fra 1. januar til 31. december.
Jeg prøvede at løse det med:

    WHERE t.StartDate >= ‘20240101’
    AND t.StartDate < ‘20250101’

Men der fik jeg forkerte resultater…
(Mand, hvor er jeg glad for at jeg tjekkede resultatet)

Fordi t.StartDate var en DATETIMEOFFSET(7), og ‘20240101’ er kun en DATETIME.
Og du bør ikke sammenligne datoer på tværs af datatyper, fordi “afrunding”.
En dato som “2024-01-01 00:00:00.0000000 +01:00” hører til 2023

Så jeg var nødt til at skrive:

    WHERE t.StartDate >= ‘2024-01-01 00:00:00.0000000 +01:00’
    AND t.StartDate < ‘2025-01-01 00:00:00.0000000 +01:00’

hvilket er noget langt, eller jeg kunne skrive:

    WHERE t.StartDate >= CAST(‘20240101’ as datetime2) AT TIME ZONE ‘Central European Standard Time’
    AND t.StartDate < CAST(‘20250101’ as datetime2) AT TIME ZONE ‘Central European Standard Time’

længere endnu, men lettere at læse, tror jeg.

CREATE TABLE #MyTable ( startdate DATETIMEOFFSET(7) NOT NULL ) SELECT * FROM #MyTable t WHERE t.StartDate >= CAST('20240101' as datetime2) AT TIME ZONE 'Central European Standard Time' AND t.StartDate < CAST('20250101' as datetime2) AT TIME ZONE 'Central European Standard Time'

da_DK