Bạn sẽ tìm thấy chủ nhật cuối cùng của tháng trong năm 2000 như thế nào?Tìm chủ nhật cuối cùng
Trả lời
SELECT
DATEADD(day,DATEDIFF(day,'19000107',DATEADD(month,DATEDIFF(MONTH,0,GETDATE() /*YourValuehere*/),30))/7*7,'19000107')
Edit: Một chính xác, cuối cùng, làm việc trả lời từ đồng nghiệp của tôi.
Thánh bò, đây là xấu xí, nhưng ở đây đi:
DECLARE @dtDate DATETIME
SET @dtDate = '2009-11-05'
SELECT DATEADD(dd, -1*(DATEPART(dw, DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @dtDate)+1, 0)))-1),
DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @dtDate)+1, 0)))
Lần đầu tiên xây dựng bảng kiểm đếm. http://www.sqlservercentral.com/articles/T-SQL/62867/ sau đó nhận được những gì bạn muốn ..
http://www.sqlservercentral.com/Forums/Topic515226-1291-1.aspx
DECLARE @DateStart DATETIME,
@DateEnd DATETIME
SELECT @DateStart = '20080131',
@DateEnd = '20101201'
SELECT DATEADD(wk,DATEDIFF(wk,6,DATEADD(mm,DATEDIFF(mm,-1,DATEADD(mm,t.N-1,@DateStart)),-1)),6)
FROM dbo.Tally t
WHERE t.N <= DATEDIFF(mm,@DateStart,@DateEnd)
DECLARE @LastDateOfMonth smalldatetime
SELECT @LastDateOfMonth = DATEADD(month, DATEDIFF(month, -1, GETDATE()), 0) -1
Select DATEADD(dd,-(CASE WHEN DATEPART(weekday,@LastDateOfMonth) = 1 THEN 0 ELSE DATEPART(weekday,@LastDateOfMonth) - 1 END),@LastDateOfMonth)
Một cách tiếp cận khác, vay mượn từ thực hành kho dữ liệu. Tạo bảng kích thước ngày và tải trước trong 10 năm hoặc lâu hơn.
TABLE dimDate (DateKey, FullDate, Day, Month, Year, DayOfWeek,
DayInEpoch, MonthName, LastDayInMonthIndicator, many more..)
Cách dễ nhất để điền vào dimDate
là dành một buổi chiều với Excel và sau đó nhập vào DB từ đó. Bảng dimDate
có một nửa phong nha có hơn 50 cột - bất cứ điều gì bạn muốn biết về một ngày.
Với điều này tại chỗ, câu hỏi trở thành một cái gì đó như:
SELECT max(FullDate)
FROM dimDate
WHERE DayOfWeek = 'Sunday'
AND Month = 11
AND Year = 2009;
Về cơ bản, tất cả các truy vấn liên quan đến ngày trở nên đơn giản.
select next_day(last_day(sysdate)-7, 'Sunday') from dual
không sql 2000 như câu hỏi ban đầu đã nêu – DasDave
select dateadd(day,1-datepart(dw, getdate()), getdate())
Tiếp Chủ Nhật trong SQL, bất kể ngày nào là ngày đầu tiên của tuần: trả về 2011/01/02 23: 59: 59.000 vào ngày 22-Dec-2010:
select DateADD(ss, -1, DATEADD(week, DATEDIFF(week, 0, getdate()), 14))
tôi tìm một số giải pháp này khó hiểu nên đây là phiên bản của tôi có các biến để giải thích các bước.
ALTER FUNCTION dbo.fn_LastSundayInMonth
(
@StartDate DATETIME
,@RequiredDayOfWeek INT /* 1= Sunday */
)
RETURNS DATETIME
AS
/*
A detailed step by step way to get the answer...
SELECT dbo.fn_LastSundayInMonth(getdate()-31,1)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,2)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,3)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,4)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,5)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,6)
SELECT dbo.fn_LastSundayInMonth(getdate()-31,7)
*/
BEGIN
DECLARE @MonthsSince1900 INTEGER
DECLARE @NextMonth INTEGER
DECLARE @DaysToSubtract INTEGER
DECLARE @FirstDayOfNextMonth DATETIME
DECLARE @LastDayOfMonthDayOfWeek INTEGER
DECLARE @LastDayOfMonth DATETIME
DECLARE @ReturnValue DATETIME
SET @MonthsSince1900=DateDiff(month, 0, @StartDate)
SET @[email protected]+1
SET @FirstDayOfNextMonth = DateAdd(month,@NextMonth, 0)
SET @LastDayOfMonth = DateAdd(day, -1, @FirstDayOfNextMonth)
SET @ReturnValue = @LastDayOfMonth
WHILE DATEPART(dw, @ReturnValue) <> @RequiredDayOfWeek
BEGIN
SET @ReturnValue = DATEADD(DAY,-1, @ReturnValue)
END
RETURN @ReturnValue
END
- 1. Tìm ngày chủ nhật cuối cùng của tháng Mười ASP.NET C#
- 2. Cách tìm ngày cuối cùng của tháng?
- 3. An toàn chủ đề nhưng nhanh chóng truy cập vào biến "cuối cùng cuối cùng"?
- 4. Chủ đề cuối cùng của ứng dụng đa luồng
- 5. Chia nhỏ 1MB cuối cùng cho tệp nhật ký 1GB
- 6. Tìm thuật toán ngày chủ nhật trước đây
- 7. Chủ đề char [] cuối cùng có an toàn không?
- 8. .OrderBy (DayOfWeek) để xử lý Chủ Nhật vào cuối tuần
- 9. Regex để tìm biến tĩnh (không cuối cùng)
- 10. Tìm chỉ mục cuối cùng của Regex bằng Java
- 11. cách tìm thứ hai cuối cùng của tháng
- 12. PHP trong khi vòng lặp tìm thấy hàng cuối cùng
- 13. jQuery - tìm lớp cuối cùng trên phần tử
- 14. Vimscript: tìm parenthese mở cuối cùng hoặc khung
- 15. Tìm điều khiển với tiêu điểm cuối cùng
- 16. VIM Khôi phục mẫu tìm kiếm cuối cùng
- 17. tìm nút tiếp theo đến cuối cùng với xpath
- 18. Tìm dòng cuối cùng trong một tệp văn bản
- 19. Cách tìm tải cuối cùng của UIWebView (Ready State 4)
- 20. Git tìm hiểu cam kết cuối cùng tôi đã đẩy
- 21. Tìm hàng cuối cùng trong bảng tính Excel
- 22. Tìm mục nhập cuối cùng trong bảng MySQL
- 23. chức năng excel để tìm số cuối cùng trong cột
- 24. Vim tìm thấy lần xuất hiện cuối cùng của
- 25. SQL Query để tìm ngày cuối cùng của tháng
- 26. Mercurial undo cam kết cuối cùng
- 27. Lệnh cuối cùng trong cùng thiết bị đầu cuối
- 28. Phương pháp không phải cuối cùng trong lớp cuối cùng
- 29. : cuối cùng con không chọn phần tử cuối cùng
- 30. Máy chủ SQL: cách truy vấn khi sao lưu nhật ký giao dịch cuối cùng đã được thực hiện?
không thành công cho hầu hết các cài đặt không phải bằng tiếng Anh ... – gbn