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
. को अपना सकते हैं और अनुकूलित कर सकते हैं अपेक्षित परिणाम दिखाने के लिए तालिका।