Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दो दिनों के बीच सप्ताहों और आंशिक सप्ताहों की संख्या गलत गणना की गई

DATEDIFF संक्रमण की गणना करता है , अवधि नहीं (उदाहरण के लिए देखें DATEDIFF(year,'20161231','20170101') ) यह रविवार को सप्ताह का पहला दिन भी मानता है। तो, हम इन सुविधाओं की भरपाई कैसे करते हैं? सबसे पहले, हम अपनी तिथियां बदलते हैं ताकि सोमवार नया रविवार हो, और दूसरा हम फेंस-पोस्ट त्रुटि की भरपाई के लिए 1 जोड़ते हैं:

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

परिणाम:

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

यदि यह आपकी इच्छित चीज़ों से मेल नहीं खाता है, तो शायद आप मेरे @Samples . को अपना सकते हैं और अनुकूलित कर सकते हैं अपेक्षित परिणाम दिखाने के लिए तालिका।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या आपको एकाधिक सम्मिलित कॉल करना चाहिए या एक्सएमएल पास करना चाहिए?

  2. SQL सर्वर तालिका में डिफ़ॉल्ट मान के साथ कॉलम सम्मिलित करने के लिए SQL DEFAULT बाधा

  3. SQL सर्वर का उपयोग करके रिक्त स्थान को शून्य मानों में कैसे परिवर्तित करें?

  4. ईएफ कोड पहले, अलग-अलग स्कीमा के साथ एक ही टेबल नाम कैसे पंजीकृत करें?

  5. एस्केपिंग कमांड पैरामीटर xp_cmdshell को dtexec में पास किया गया