sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du den sidste dag i måneden i SQL Server

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

  1. Dude, hvem ejer det #temp bord?

  2. SQL LocalDB vs SQL Server CE

  3. Delvis indeks bruges ikke i ON CONFLICT-klausulen, mens du udfører en upsert i Postgresql

  4. Bedste MySQL DigitalOcean-ydeevne – ScaleGrid vs. DigitalOcean Managed Databases