Những điều sau đây sẽ hoạt động với bất cứ điều gì bạn cho là ngày đầu tiên trong tuần (chủ nhật, thứ hai, v.v.), chỉ cần đảm bảo bạn sử dụng SET DATEFIRST
nếu bạn muốn thay đổi từ mặc định. SET DATEFIRST 1
sẽ làm ngày đầu tiên của tuần là thứ hai.
SELECT DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekStart],
DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekEnd]
CHỈNH SỬA
Tôi vừa đọc lại yêu cầu của bạn và tôi nghĩ rằng bạn có thể đang theo đuổi một cái gì đó khác với những gì tôi đã đưa ra ở trên. Nếu bạn muốn ngày trong tuần của đầu tiên và ngày cuối cùng của tháng, điều này sẽ thực hiện thủ thuật:
SELECT DATENAME(WEEKDAY, DATEADD(DAY, 1 - DATEPART(DAY, GETDATE()), GETDATE())) [FirstDayOfMonth],
DATENAME(WEEKDAY, DATEADD(DAY, - DATEPART(DAY, DATEADD(MONTH, 1, GETDATE())), DATEADD(MONTH, 1, GETDATE()))) [LastDayOfMonth]