Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Jumlah minggu dan sebagian minggu antara dua hari dihitung salah

DATEDIFF menghitung transisi , bukan titik (mis. lihat DATEDIFF(year,'20161231','20170101') ). Itu juga memperlakukan hari Minggu sebagai hari pertama dalam seminggu. Jadi, bagaimana kita mengkompensasi fitur-fitur ini? Pertama, kami menggeser tanggal kami sehingga Senin adalah hari Minggu baru, dan kedua kami menambahkan 1 untuk mengkompensasi kesalahan Pagar-Pos:

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

Hasil:

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

Jika ini tidak sesuai dengan yang Anda inginkan, mungkin Anda dapat mengadopsi dan mengadaptasi @Samples saya tabel untuk menunjukkan hasil yang Anda harapkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Fungsi STRING_ESCAPE() Bekerja di SQL Server (T-SQL)

  2. Apakah JPA 2.0 mendukung variabel tabel SQL Server?

  3. Panggil prosedur tersimpan dengan parameter bernilai tabel dari Java

  4. Cara Menemukan Collation di SQL Server (T-SQL)

  5. Bagaimana cara mengonversi DateTime ke VarChar