Започвайки от SQL Server 2012, EOMONTH()
функцията ви позволява да намерите последния ден от всеки месец. Приема два аргумента; един за началната дата и един незадължителен аргумент, за да посочите колко месеца да добавите към тази дата.
Тази статия предоставя примери, които демонстрират как EOMONTH()
работи в SQL Server.
Синтаксис
Първо, ето синтаксиса:
EOMONTH ( start_date [, month_to_add ] )
Където start_date
е датата, за която искате да намерите последния ден от месеца, и month_to_add
е колко месеца (ако има такива), които искате да добавите към началната дата.
EOMONTH()
функцията връща стойност в дата тип данни.
Пример 1
Ето основен пример, за да демонстрирате как работи:
SELECT EOMONTH( '2025-01-01' ) AS Result;
Резултат:
+------------+ | Result | |------------| | 2025-01-31 | +------------+
В този случай нашият начален месец е януари, така че резултатът ни показва, че последният ден на януари е 31.
Пример 2 – Добавете месец
Ето пример за използване на втори аргумент, за да посочите колко месеца да добавите. В този случай добавям един месец към началната дата:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;
Резултат:
+------------+ | Result | |------------| | 2025-02-28 | +------------+
И резултатът ни показва последния ден на февруари. Това е така, защото добавихме един месец към началната дата.
Пример 3 – Изваждане на месец
Можете да използвате отрицателно число, за да извадите един или повече месеца от началната дата. Като това:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;
Резултат:
+------------+ | Result | |------------| | 2024-12-31 | +------------+
Пример 4 – Използване на системната дата
Ето пример за получаване на края на месеца от текущата дата:
SELECT SYSDATETIME() AS 'Current Date', EOMONTH( SYSDATETIME() ) AS 'End of Month';
Резултат:
+-----------------------------+----------------+ | Current Date | End of Month | |-----------------------------+----------------| | 2018-06-04 22:53:32.7694823 | 2018-06-30 | +-----------------------------+----------------+
Както споменахме, EOMONTH()
функцията връща стойността си в дата тип данни. Ето защо резултатът в този пример показва несъответствие между начина, по който се показва началната дата и как се показва краят на месеца.
В този случай нашата начална дата се генерира с SYSDATETIME()
функция, която връща стойността си като datetime2(7) тип данни. Този тип данни включва компонента за време, както и датата. Датата типът данни включва само компонента за дата.
Винаги можете да форматирате датата с помощта на FORMAT()
функция или използвайте различни други функции на TSQL, за да извлечете различни части от датата.
Пример 5 – Отброяване до края на месеца
Можете също да комбинирате EOMONTH()
функционира с други функции, за да постигнете желания резултат.
Ето пример, който връща колко дни, часове, минути и секунди до края на месеца:
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';
Резултат:
+----------------+---------+--------+---------+-----------+-----------+ | Current Date | EOM | Days | Hours | Minutes | Seconds | |----------------+---------+--------+---------+-----------+-----------| | 04 June | 30 June | 26 | 601 | 36055 | 2163252 | +----------------+---------+--------+---------+-----------+-----------+