2013-05-20 76 views
30

Tôi cần phải tìm ngày cuối cùng của một tháng theo định dạng sau:SQL Query để tìm ngày cuối cùng của tháng

"2013-05-31 00:00:00:000" 

Bất kỳ ai xin vui lòng giúp đỡ.

+1

có thể trùng lặp của [Nhận ngày cuối cùng của tháng trong SQL] (http://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql) – Pondlife

+0

tham khảo https://codepedia.info/eomonth-last-date-month-in-sql-server/ –

Trả lời

58

Hãy thử này -

CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
(
    @Date DATETIME 
) 
RETURNS DATETIME 
AS 
BEGIN 

    RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0)) 

END 

Query:

DECLARE @date DATETIME 
SELECT @date = '2013-05-31 15:04:10.027' 

SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0)) 

Output:

----------------------- 
2013-05-31 00:00:00.000 
+1

Chỉ cần nhớ rằng nếu bạn đang sử dụng điều này trong một tuyên bố giữa để có được (ví dụ) tất cả hồ sơ cho một tháng, điều này sẽ loại trừ các bản ghi từ ngày cuối cùng. Bạn có thể cần phải sử dụng ngày đầu tiên của tháng tiếp theo để thay thế. – SteveCav

7
declare @date datetime; 
set @date = getdate(); -- or some date 
select dateadd(month,1+datediff(month,0,@date),-1); 
33

Tôi biết điều này câu hỏi đã được cho SQL Server 2005, nhưng tôi nghĩ rằng tôi muốn đề cập đến - như của SQL 2012, bây giờ có một chức năng EOMONTH() được ngày cuối cùng của tháng. Để có được nó ở định dạng được chỉ định bởi người yêu cầu ban đầu, bạn sẽ phải truyền đến một số datetime.

SELECT CAST(eomonth(GETDATE()) AS datetime) 
-1

http://php.net/manual/en/function.cal-days-in-month.php

Chiều dài trong những ngày của tháng được chọn trong lịch cho

<?php 
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 
echo "There was $num days in August 2003"; 
?> 
+0

Đó thực sự không phải là câu hỏi được đặt ra, cũng như không ai đề cập đến bất cứ điều gì về việc sử dụng PHP. – Matt

1
dateadd(month,1+datediff(month,0,getdate()),-1) 

Để kiểm tra chạy:

print dateadd(month,1+datediff(month,0,@date),-1) 
0

Tính ngày cuối cùng của tháng là khá đơn giản tính -

  1. Tìm tổng tháng đếm đến ngày hôm nay sử dụng DATEDIFF (.., .., ..) chức năng - Chọn DATEDIFF (MM, 0, getdate())

Output - 1374, Nếu getdate() đầu ra là "2014/07/23 19: 33: 46,850"

  1. Tăng thêm 1 vào tổng số tháng đếm - Chọn DATEDIFF (MM, 0, getdate()) + 1
.210

Output - 1375, Nếu getdate() đầu ra là "2014/07/23 19: 33: 46,850"

  1. Lấy ngày đầu tiên của tháng tiếp theo - Chọn DATEADD (MM, DATEDIFF (MM, 0 , getdate()) + 1,0)

Output - '2014-08-01 00: 00: 00.000, Nếu getdate() đầu ra là "2014/07/23 19: 33: 46,850"

  1. Trừ bằng -1 vào ngày đầu tiên của tháng tiếp theo, sẽ trả về ngày cuối cùng của tháng hiện tại - Chọn DATEADD (DD, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()) + 1,0))

Đầu ra - '2014-07-31 00:00:00.000 ', Nếu đầu ra getdate() là "2014-07-23 19: 33: 46.850"

Trong cùng cách tính chúng ta có thể đạt được - 1. Ngày cuối cùng của tháng tiếp theo 2. Ngày cuối cùng của tháng trước và cứ thế ...

Tôi hy vọng bài viết này sẽ hữu ích.

0

Chọn DATEADD (NGÀY, - (DAY (DATEADD (MONTH, 1, getdate()))), DATEADD (MONTH, 1, getdate()))

Điều này hoạt động tốt trong T-sql ..

Thay thế GETDATE() truy vấn bằng tên cột của bạn.

0
TO FIND 1ST and Last day of the Previous, Current and Next Month in Oracle SQL 
----------------------------------------------------------------------------- 
SELECT 
SYSDATE, 
LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1 FDPM, 
LAST_DAY(ADD_MONTHS(SYSDATE,-1)) LDPM, 
LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1 FDCM, 
LAST_DAY(SYSDATE)LDCM, 
LAST_DAY(SYSDATE)+1 FDNM, 
LAST_DAY(LAST_DAY(SYSDATE)+1) LDNM 
FROM DUAL 
+0

Wecome để StackOverflow! Vui lòng xem xét thêm một số giải thích cho mã của bạn. Cảm ơn bạn. – Aurasphere

Các vấn đề liên quan