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

Số tuần và một phần tuần giữa hai ngày được tính sai

DATEDIFF số lượng chuyển tiếp , không phải khoảng thời gian (ví dụ:xem DATEDIFF(year,'20161231','20170101') ). Nó cũng coi Chủ nhật là ngày đầu tiên trong tuần. Vì vậy, làm thế nào để chúng tôi bù đắp cho các tính năng này? Đầu tiên, chúng tôi thay đổi ngày của mình để Thứ Hai là Chủ Nhật mới và thứ hai, chúng tôi thêm 1 để bù cho lỗi Hàng rào-Post:

declare @Samples table (
    StartAt date not null,
    EndAt date not null,
    SampleName varchar(93) not null
)
insert into @Samples (StartAt,EndAt,SampleName) values
('20170101','20170131','Question - 6'),
('20170102','20170129','Exactly 4'),
('20170102','20170125','3 and a bit, round to 4'),
('20170101','20170129','4 and 1 day, round to 5')
--DATEDIFF counts *transitions*, and always considers Sunday the first day of the week
--We subtract a day from each date so that we're effectively treating Monday as the first day of the week
--We also add one because DATEDIFF counts transitions but we want periods (FencePost/FencePanel)
select *,
    DATEDIFF(WEEK, DATEADD(day,-1,StartAt), DATEADD(day,-1,EndAt)) +1
    as NumWeeks
from @Samples

Kết quả:

StartAt    EndAt      SampleName                 NumWeeks
---------- ---------- -------------------------- -----------
2017-01-01 2017-01-31 Question - 6               6
2017-01-02 2017-01-29 Exactly 4                  4
2017-01-02 2017-01-25 3 and a bit, round to 4    4
2017-01-01 2017-01-29 4 and 1 day, round to 5    5

Nếu điều này không phù hợp với những gì bạn muốn, có lẽ bạn có thể áp dụng và điều chỉnh @Samples của tôi để hiển thị kết quả bạn mong đợi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL Ràng buộc duy nhất nhiều cột cũng cho phép nhiều cột

  2. Xóa tài khoản thư cơ sở dữ liệu (SSMS)

  3. Di chuyển tệp cơ sở dữ liệu SQL Server 2008 đến vị trí thư mục mới

  4. OPENXML với xmlns:dt

  5. Làm cách nào để tách một ký tự ra khỏi một cột trong SQL Server?