Bắt đầu với SQL Server 2012, EOMONTH()
chức năng cho phép bạn tìm ngày cuối cùng của bất kỳ tháng nhất định nào. Nó chấp nhận hai đối số; một đối số cho ngày bắt đầu và một đối số tùy chọn để chỉ định số tháng cần thêm vào ngày đó.
Bài viết này cung cấp các ví dụ minh họa cách EOMONTH()
hoạt động trong SQL Server.
Cú pháp
Đầu tiên, đây là cú pháp:
EOMONTH ( start_date [, month_to_add ] )
Nơi start_date
là ngày bạn muốn tìm ngày cuối cùng của tháng và month_to_add
là số tháng (nếu có) bạn muốn thêm vào ngày bắt đầu.
EOMONTH()
hàm trả về một giá trị trong ngày kiểu dữ liệu.
Ví dụ 1
Dưới đây là một ví dụ cơ bản để chứng minh cách hoạt động của nó:
SELECT EOMONTH( '2025-01-01' ) AS Result;
Kết quả:
+------------+ | Result | |------------| | 2025-01-31 | +------------+
Trong trường hợp này, tháng bắt đầu của chúng ta là tháng 1, do đó, kết quả cho chúng ta thấy rằng ngày cuối cùng của tháng 1 là ngày 31.
Ví dụ 2 - Thêm tháng
Dưới đây là một ví dụ về việc sử dụng đối số thứ hai để chỉ định số tháng cần thêm. Trong trường hợp này, tôi thêm một tháng vào ngày bắt đầu:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;
Kết quả:
+------------+ | Result | |------------| | 2025-02-28 | +------------+
Và kết quả cho chúng ta thấy ngày cuối cùng của tháng 2. Điều này là do chúng tôi đã thêm một tháng vào ngày bắt đầu.
Ví dụ 3 - Trừ một tháng
Bạn có thể sử dụng một số âm để trừ một hoặc nhiều tháng kể từ ngày bắt đầu. Như thế này:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;
Kết quả:
+------------+ | Result | |------------| | 2024-12-31 | +------------+
Ví dụ 4 - Sử dụng Ngày hệ thống
Dưới đây là một ví dụ về nhận được cuối tháng từ ngày hiện tại:
SELECT SYSDATETIME() AS 'Current Date', EOMONTH( SYSDATETIME() ) AS 'End of Month';
Kết quả:
+-----------------------------+----------------+ | Current Date | End of Month | |-----------------------------+----------------| | 2018-06-04 22:53:32.7694823 | 2018-06-30 | +-----------------------------+----------------+
Như đã đề cập, EOMONTH()
hàm trả về giá trị của nó trong ngày loại dữ liệu. Đó là lý do tại sao kết quả trong ví dụ này cho thấy sự khác biệt giữa cách hiển thị ngày bắt đầu và cách hiển thị cuối tháng.
Trong trường hợp này, ngày bắt đầu của chúng tôi được tạo bằng SYSDATETIME()
, trả về giá trị của nó dưới dạng datetime2 (7) loại dữ liệu. Kiểu dữ liệu này bao gồm thành phần thời gian cũng như ngày tháng. Ngày kiểu dữ liệu chỉ bao gồm thành phần ngày tháng.
Bạn luôn có thể định dạng ngày bằng FORMAT()
hoặc sử dụng nhiều hàm TSQL khác để trích xuất các phần khác nhau của ngày tháng.
Ví dụ 5 - Đếm ngược đến cuối tháng
Bạn cũng có thể kết hợp EOMONTH()
hoạt động với các chức năng khác để đạt được kết quả mong muốn.
Dưới đây là một ví dụ trả về số ngày, giờ, phút và giây cho đến cuối tháng:
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';
Kết quả:
+----------------+---------+--------+---------+-----------+-----------+ | Current Date | EOM | Days | Hours | Minutes | Seconds | |----------------+---------+--------+---------+-----------+-----------| | 04 June | 30 June | 26 | 601 | 36055 | 2163252 | +----------------+---------+--------+---------+-----------+-----------+