Från och med SQL Server 2012, EOMONTH()
funktionen låter dig hitta den sista dagen i en given månad. Den godtar två argument; ett för startdatumet och ett valfritt argument för att ange hur många månader som ska läggas till det datumet.
Den här artikeln ger exempel som visar hur EOMONTH()
fungerar i SQL Server.
Syntax
Först, här är syntaxen:
EOMONTH ( start_date [, month_to_add ] )
Där start_date
är det datum för vilket du vill hitta den sista dagen i månaden och month_to_add
är hur många månader (om några) du vill lägga till startdatumet.
EOMONTH()
funktion returnerar ett värde i datum datatyp.
Exempel 1
Här är ett grundläggande exempel för att visa hur det fungerar:
SELECT EOMONTH( '2025-01-01' ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2025-01-31 | +------------+
I det här fallet är vår startmånad januari, så resultatet visar att den sista dagen i januari är 31.
Exempel 2 – Lägg till en månad
Här är ett exempel på hur man använder ett andra argument för att ange hur många månader som ska läggas till. I det här fallet lägger jag till en månad till startdatumet:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2025-02-28 | +------------+
Och resultatet visar oss sista dagen i februari. Detta beror på att vi lagt till en månad till startdatumet.
Exempel 3 – Subtrahera en månad
Du kan använda ett negativt tal för att subtrahera en eller flera månader från startdatumet. Så här:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;
Resultat:
+------------+ | Result | |------------| | 2024-12-31 | +------------+
Exempel 4 – Använda systemdatumet
Här är ett exempel på hur man får slutet av månaden från det aktuella datumet:
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ämnts, EOMONTH()
funktion returnerar sitt värde i datum data typ. Det är därför resultatet i det här exemplet visar en avvikelse mellan hur startdatumet visas och hur slutet av månaden visas.
I det här fallet genereras vårt startdatum med SYSDATETIME()
funktion, som returnerar sitt värde som en datetime2(7) data typ. Denna datatyp inkluderar tidskomponenten såväl som datum. datumet datatypen inkluderar endast datumkomponenten.
Du kan alltid formatera datumet med FORMAT()
funktion, eller använd olika andra TSQL-funktioner för att extrahera olika delar av datumet.
Exempel 5 – Nedräkning till slutet av månaden
Du kan också kombinera EOMONTH()
funktion med andra funktioner för att uppnå ett önskat resultat.
Här är ett exempel som returnerar hur många dagar, timmar, minuter och sekunder till slutet av månaden:
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 | +----------------+---------+--------+---------+-----------+-----------+