Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment trouver le dernier jour du mois dans SQL Server

À partir de SQL Server 2012, le EOMONTH() La fonction vous permet de trouver le dernier jour d'un mois donné. Il accepte deux arguments ; un pour la date de début et un argument facultatif pour spécifier le nombre de mois à ajouter à cette date.

Cet article fournit des exemples qui montrent comment EOMONTH() fonctionne dans SQL Server.

Syntaxe

Tout d'abord, voici la syntaxe :

EOMONTH ( start_date [, month_to_add ] )

start_date est la date pour laquelle vous voulez trouver le dernier jour du mois, et month_to_add est le nombre de mois (le cas échéant) que vous souhaitez ajouter à la date de début.

Le EOMONTH() la fonction renvoie une valeur dans la date type de données.

Exemple 1

Voici un exemple de base pour illustrer son fonctionnement :

SELECT EOMONTH( '2025-01-01' ) AS Result;

Résultat :

+------------+
| Result     |
|------------|
| 2025-01-31 |
+------------+

Dans ce cas, notre mois de début est janvier, donc le résultat nous montre que le dernier jour de janvier est le 31.

Exemple 2 – Ajouter un mois

Voici un exemple d'utilisation d'un deuxième argument pour spécifier le nombre de mois à ajouter. Dans ce cas, j'ajoute un mois à la date de début :

SELECT EOMONTH( '2025-01-01', 1 ) AS Result;

Résultat :

+------------+
| Result     |
|------------|
| 2025-02-28 |
+------------+

Et le résultat nous montre le dernier jour de février. C'est parce que nous avons ajouté un mois à la date de début.

Exemple 3 - Soustraire un mois

Vous pouvez utiliser un nombre négatif pour soustraire un ou plusieurs mois de la date de début. Comme ceci :

SELECT EOMONTH( '2025-01-01', -1 ) AS Result;

Résultat :

+------------+
| Result     |
|------------|
| 2024-12-31 |
+------------+

Exemple 4 - Utilisation de la date système

Voici un exemple d'obtention de la fin du mois à partir de la date actuelle :

SELECT 
    SYSDATETIME() AS 'Current Date',
    EOMONTH( SYSDATETIME() ) AS 'End of Month';

Résultat :

+-----------------------------+----------------+
| Current Date                | End of Month   |
|-----------------------------+----------------|
| 2018-06-04 22:53:32.7694823 | 2018-06-30     |
+-----------------------------+----------------+

Comme mentionné, le EOMONTH() la fonction renvoie sa valeur dans la date Type de données. C'est pourquoi le résultat de cet exemple montre une différence entre la façon dont la date de début est affichée et la façon dont la fin du mois est affichée.

Dans ce cas, notre date de début est générée avec le SYSDATETIME() fonction, qui renvoie sa valeur sous la forme d'un datetime2(7) Type de données. Ce type de données inclut la composante heure ainsi que la date. La date le type de données inclut uniquement le composant de date.

Vous pouvez toujours formater la date en utilisant le FORMAT() ou utilisez diverses autres fonctions TSQL pour extraire diverses parties de la date.

Exemple 5 - Compte à rebours jusqu'à la fin du mois

Vous pouvez également combiner le EOMONTH() fonctionner avec d'autres fonctions pour obtenir un résultat souhaité.

Voici un exemple qui renvoie le nombre de jours, d'heures, de minutes et de secondes jusqu'à la fin du mois :

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';

Résultat :

+----------------+---------+--------+---------+-----------+-----------+
| Current Date   | EOM     | Days   | Hours   | Minutes   | Seconds   |
|----------------+---------+--------+---------+-----------+-----------|
| 04 June        | 30 June | 26     | 601     | 36055     | 2163252   |
+----------------+---------+--------+---------+-----------+-----------+