Startende med SQL Server 2012, EOMONTH()
funktionen giver dig mulighed for at finde den sidste dag i en given måned. Den accepterer to argumenter; et for startdatoen og et valgfrit argument til at angive, hvor mange måneder der skal føjes til denne dato.
Denne artikel giver eksempler, der viser, hvordan EOMONTH()
virker i SQL Server.
Syntaks
Først her er syntaksen:
EOMONTH ( start_date [, month_to_add ] )
Hvor start_date
er den dato, som du vil finde den sidste dag i måneden, og month_to_add
er, hvor mange måneder (hvis nogen) du vil tilføje til startdatoen.
EOMONTH()
funktion returnerer en værdi i datoen datatype.
Eksempel 1
Her er et grundlæggende eksempel for at demonstrere, hvordan det virker:
SELECT EOMONTH( '2025-01-01' ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2025-01-31 | +------------+
I dette tilfælde er vores startmåned januar, så resultatet viser os, at den sidste dag i januar er den 31.
Eksempel 2 – Tilføj en måned
Her er et eksempel på brug af et andet argument til at angive, hvor mange måneder der skal tilføjes. I dette tilfælde tilføjer jeg en måned til startdatoen:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2025-02-28 | +------------+
Og resultatet viser os den sidste dag i februar. Dette skyldes, at vi har tilføjet en måned til startdatoen.
Eksempel 3 – Træk en måned fra
Du kan bruge et negativt tal til at trække en eller flere måneder fra startdatoen. Sådan:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2024-12-31 | +------------+
Eksempel 4 – Brug af systemdatoen
Her er et eksempel på at få slutningen af måneden fra den aktuelle dato:
SELECT SYSDATETIME() AS 'Current Date', EOMONTH( SYSDATETIME() ) AS 'End of Month';
Resultat:
+-----------------------------+----------------+ | Current Date | End of Month | |-----------------------------+----------------| | 2018-06-04 22:53:32.7694823 | 2018-06-30 | +-----------------------------+----------------+
Som nævnt er EOMONTH()
funktion returnerer sin værdi i datoen datatype. Det er derfor, resultatet i dette eksempel viser en uoverensstemmelse mellem, hvordan startdatoen vises, og hvordan slutningen af måneden vises.
I dette tilfælde genereres vores startdato med SYSDATETIME()
funktion, som returnerer dens værdi som en datetime2(7) datatype. Denne datatype inkluderer tidskomponenten såvel som datoen. datoen datatypen inkluderer kun datokomponenten.
Du kan altid formatere datoen ved at bruge FORMAT()
funktion, eller brug forskellige andre TSQL-funktioner til at udtrække forskellige dele af datoen.
Eksempel 5 – Nedtælling til slutningen af måneden
Du kan også kombinere EOMONTH()
funktion med andre funktioner for at opnå et ønsket resultat.
Her er et eksempel, der returnerer hvor mange dage, timer, minutter og sekunder indtil slutningen af måneden:
SELECT FORMAT(SYSDATETIME(), 'dd MMMM') AS 'Current Date', FORMAT(EOMONTH( SYSDATETIME() ), 'dd MMMM') AS 'EOM', DATEDIFF(day, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Days', DATEDIFF(hour, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Hours', DATEDIFF(minute, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Minutes', DATEDIFF(second, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Seconds';
Resultat:
+----------------+---------+--------+---------+-----------+-----------+ | Current Date | EOM | Days | Hours | Minutes | Seconds | |----------------+---------+--------+---------+-----------+-----------| | 04 June | 30 June | 26 | 601 | 36055 | 2163252 | +----------------+---------+--------+---------+-----------+-----------+