Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć ostatni dzień miesiąca w SQL Server

Począwszy od SQL Server 2012, EOMONTH() funkcja pozwala znaleźć ostatni dzień danego miesiąca. Przyjmuje dwa argumenty; jeden dla daty rozpoczęcia i jeden opcjonalny argument określający, ile miesięcy należy dodać do tej daty.

Ten artykuł zawiera przykłady pokazujące, jak EOMONTH() działa w SQL Server.

Składnia

Po pierwsze, oto składnia:

EOMONTH ( start_date [, month_to_add ] )

Gdzie start_date to data, dla której chcesz znaleźć ostatni dzień miesiąca, a month_to_add to ile miesięcy (jeśli w ogóle) chcesz dodać do daty rozpoczęcia.

EOMONTH() funkcja zwraca wartość z daty typ danych.

Przykład 1

Oto podstawowy przykład pokazujący, jak to działa:

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

Wynik:

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

W tym przypadku naszym miesiącem początkowym jest styczeń, więc wynik pokazuje, że ostatnim dniem stycznia jest 31.

Przykład 2 – Dodaj miesiąc

Oto przykład użycia drugiego argumentu do określenia liczby miesięcy do dodania. W takim przypadku dodaję miesiąc do daty rozpoczęcia:

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

Wynik:

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

A wynik pokazuje nam ostatni dzień lutego. Dzieje się tak, ponieważ do daty rozpoczęcia dodaliśmy jeden miesiąc.

Przykład 3 – Odejmij miesiąc

Możesz użyć liczby ujemnej, aby odjąć jeden lub więcej miesięcy od daty rozpoczęcia. Tak:

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

Wynik:

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

Przykład 4 – Używanie daty systemowej

Oto przykład pobrania końca miesiąca od bieżącej daty:

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

Wynik:

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

Jak wspomniano, EOMONTH() funkcja zwraca swoją wartość w dacie typ danych. Dlatego wynik w tym przykładzie pokazuje rozbieżność między sposobem wyświetlania daty rozpoczęcia a sposobem wyświetlania końca miesiąca.

W tym przypadku nasza data rozpoczęcia jest generowana za pomocą SYSDATETIME() funkcja, która zwraca swoją wartość jako datetime2(7) typ danych. Ten typ danych zawiera składnik czasu oraz datę. data typ danych zawiera tylko składnik daty.

Zawsze możesz sformatować datę za pomocą FORMAT() funkcji lub użyj różnych innych funkcji TSQL, aby wyodrębnić różne części daty.

Przykład 5 – Odliczanie do końca miesiąca

Możesz także połączyć EOMONTH() współpracować z innymi funkcjami, aby osiągnąć pożądany rezultat.

Oto przykład, który zwraca liczbę dni, godzin, minut i sekund do końca miesiąca:

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyłączyć ograniczenie wyboru w programie SQL Server (przykłady T-SQL)

  2. Zapytania hierarchiczne w SQL Server 2005

  3. Konserwacja baz danych systemu SQL Server

  4. zwraca wartość na pozycji z STRING_SPLIT w SQL Server 2016

  5. Jak uzyskać tylko wartości liczbowe kolumn?