पहले के अन्य प्रयासों के लिए यहां एक लिंक है http://www.sqlteam। com/forums/topic.asp?TOPIC_ID=60510
यह समारोह के लिए पुराना कोड है
CREATE function f_isoweek(@date datetime)
RETURNS INT
as
BEGIN
DECLARE @rv int
SELECT @rv = datediff(ww, dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4),day4)
FROM (SELECT dateadd(ww, datediff(day, 0, @date)/7, 3) day4) a
RETURN @rv
END
@AndriyM के शानदार जवाब को अपने साथ मिलाने के बाद, हम 1 लाइन पर आ गए हैं। यह नया कोड है।
CREATE function f_isoweek(@date datetime)
RETURNS INT
as
BEGIN
RETURN (datepart(DY, datediff(d, 0, @date) / 7 * 7 + 3)+6) / 7
-- replaced code for yet another improvement.
--RETURN (datepart(DY, dateadd(ww, datediff(d, 0, @date) / 7, 3))+6) / 7
END
पुराने कोड के लिए स्पष्टीकरण (नए कोड की व्याख्या नहीं करने जा रहा है। यह मेरे कोड और AndriyM के कोड से अंश है):
चुनी गई तिथि का कार्यदिवस 4 ढूँढना
dateadd(week, datediff(day, 0, @date)/7, 3)
समवर्ष ढूँढना - सप्ताह के दिन का वर्ष 4 सप्ताह का हमेशा वही वर्ष होता है जो उस सप्ताह का समवर्ष होता है
datediff(yy, 0, day4)
आइसोइयर के पहले दिन में 3 दिन जोड़ने पर आइसोइयर के पहले आइसोवीक का एक यादृच्छिक दिन पाया जाता है
dateadd(yy, datediff(yy, 0, day4),3)
इस वर्ष के पहले सम सप्ताह के सापेक्ष सप्ताह का पता लगाना
datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7
पहले आइसोवीक के 4 दिनों के सोमवार को घटाकर सप्ताह के गुरुवार को इस साल के पहले आइसोवीक के पहले दिन से पहले खोजना होगा
dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4)
पहले सप्ताह के पहले गुरुवार और चुने हुए सप्ताह के पहले गुरुवार को जानने से, सप्ताह की गणना करना काफी आसान हो जाता है, इससे कोई फर्क नहीं पड़ता कि दोनों तिथियों के सप्ताह के दिनों में गुरुवार को कौन सी सेटिंग तिथि है।
datediff(ww, dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4),day4)