Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để có được danh sách Ngày bắt đầu trong tuần (Thứ hai) và Ngày kết thúc (Chủ nhật) giữa hai ngày?

Điều này sẽ hoạt động miễn là khoảng thời gian là 38 năm hoặc ít hơn. Nó sẽ cung cấp hiệu suất tốt hơn và nó không phụ thuộc vào cài đặt cục bộ của máy chủ.

Cài đặt này sẽ khiến tập lệnh của bạn trả về kết quả sai:

set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')

Điều này có nghĩa là cài đặt cục bộ của bạn hiện xung đột với nhu cầu của bạn và mã của bạn đang bù đắp.

Đây là kịch bản. Kịch bản được giới hạn trong 38 năm vì lý do hiệu suất (tôi thấy rằng không chắc bạn cần những khoảng thời gian lớn hơn thế). Sẽ khá dễ dàng để kéo dài nó đến nhiều năm hơn.

DECLARE @FromDate DATE = '2014-03-21'    
DECLARE @ToDate DATE  = '2014-03-24'    

SELECT @fromdate = dateadd(day, datediff(day, 0, @FromDate)/7*7, 0), 
@todate = dateadd(day, datediff(day, 0, @ToDate)/7*7, 6)

SELECT dateadd(d, number * 7, @fromdate) Start_Week, 
dateadd(d, number * 7 + 6, @fromdate) End_Week
FROM
master..spt_values
WHERE type = 'P' and
@todate >= dateadd(d, number * 7, @fromdate)

Kết quả:

Start_Week  End_Week
2014-03-17  2014-03-23
2014-03-24  2014-03-30


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố số dòng thủ tục được lưu trữ trên SQL Server

  2. Câu lệnh SQL try-catch không xử lý được lỗi (SQL Server 2008)

  3. Làm cách nào để giải mã mật khẩu từ máy chủ SQL?

  4. Ngắt dòng SQL không hoạt động

  5. Tại sao ISNUMERIC (',') là true?