sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar den sista dagen i månaden i SQL Server

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   |
+----------------+---------+--------+---------+-----------+-----------+

  1. PRAGMA table_list i SQLite

  2. Vad motsvarar LISTAGG (Oracle-databas) i PostgreSQL?

  3. Hur använder jag Postgres JSONB datatype med JPA?

  4. SQL Server 2016:Skapa en databasanvändare