Câu trả lời của Quassnoi có hiệu quả, nhưng loại khiến bạn phải bận tâm trong việc dọn dẹp ngày tháng nếu chúng là ngày vào giữa ngày (đầu tuần của anh ấy khiến bạn sớm hơn bạn một ngày nếu bạn sử dụng thời gian ở giữa trong ngày - bạn có thể kiểm tra bằng GETDATE ()).
Tôi đã sử dụng một cái gì đó như thế này trong quá khứ:
SELECT
CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL), DATECOL)), 101),
CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL) - 6, DATECOL)), 101)
Một lợi ích phụ của việc này là bằng cách sử dụng @@ DATEFIRST, bạn có thể xử lý các ngày bắt đầu tuần không chuẩn (mặc định là Chủ nhật, nhưng với SET @@ DATEFIRST, bạn có thể thay đổi điều này).
Có vẻ như thật điên rồ khi thao tác ngày tháng đơn giản trong SQL Server phải phức tạp đến mức này, nhưng bạn hiểu rồi đấy ...