2012-04-27 17 views
7

Tôi muốn tìm hồ sơ của tuần này chỉ cần khai báo ngày hiện tại. Ví dụ:Tìm phạm vi ngày trong tuần theo ngày hiện tại bằng sql?

 select datename(dw,getdate()) -- Example today is Friday "27-04-2012" 

vậy làm thế nào tôi có thể có được phạm vi ngày

 start on monday "23-04-2012" or sunday "22-04-2012" As @dateStart to 

    end on sunday "29-04-2012" or saturday "28-04-2012" As @dateEnd 

sau đó tôi có thể lựa chọn truy vấn bằng cách

 select * from table where date>[email protected] AND date<[email protected] 
+0

Bạn cần kiểm tra ngày nào trong tuần bạn đang ở trên và trừ/thêm số ngày có liên quan vào ngày của bạn. – BugFinder

Trả lời

13

Dưới đây là một số lệnh hữu ích để giúp mỗi ngày trong tuần

SELECT 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -2) SatOfPreviousWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) SunOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) MondayOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 1) TuesOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 2) WedOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 3) ThursOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 4) FriOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) SatOfCurrentWeek 

sau đó bạn sẽ sử dụng các truy vấn của bạn để có được phạm vi ngày:

SELECT * 
FROM yourTable 
WHERE yourDate >= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) -- Sunday 
AND yourDate <= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) -- Saturday 
4

Vì vậy, bạn muốn chỉ ghi từ tuần này?

SELECT t.* 
FROM table t 
WHERE t.date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND t.date <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
1

Các truy vấn mà những người khác đã đề xuất có thể hoạt động, nhưng bạn chưa xác định "tuần" là gì cho bạn. Tùy thuộc vào quốc gia/khu vực và lý do kinh doanh, một tuần có thể là Sun-Sat, Mon-Sun, Mon-Fri, v.v.

Do đó giải pháp tốt nhất để tìm kiếm ngày đầu tiên và cuối tuần có lẽ là calendar table nơi bạn điền trước những ngày đầu tiên và cuối cùng của tuần cho mỗi ngày bạn cần. Sau đó, bạn có thể sử dụng một truy vấn đơn giản để có được sự khởi đầu và ngày kết thúc đúng để sử dụng trong truy vấn của bạn:

select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek 
from dbo.Calendar 
where BaseDate = @SomeDate 

Giải pháp này cũng có lợi thế mà bạn có thể dễ dàng làm việc với các định nghĩa khác nhau của một tuần bằng cách thêm cột mới vào bảng lịch của bạn.