SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
उपरोक्त क्वेरी 31 दिसंबर की शुरुआत में मध्यरात्रि के लिए डेटाटाइम मान देती है। यह वर्ष के आखिरी क्षण से लगभग 24 घंटे कम है। यदि आप 31 दिसंबर को होने वाले समय को शामिल करना चाहते हैं, तो आपको अगले वर्ष के पहले वर्ष की तुलना <
से करनी चाहिए तुलना। या आप चालू वर्ष के अंतिम कुछ मिलीसेकंड से तुलना कर सकते हैं, लेकिन यदि आप DATETIME (जैसे DATETIME2) के अलावा किसी अन्य चीज़ का उपयोग कर रहे हैं, तो यह अभी भी एक अंतर छोड़ देता है:
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear
अन्य अवधियां
इस दृष्टिकोण के दो अच्छे पहलू हैं:अच्छा प्रदर्शन और इसे yy
की दोनों घटनाओं को बदलकर अन्य अवधियों के लिए आसानी से बदला जा सकता है (=वर्ष) एक अलग स्ट्रिंग के साथ:
yy, yyyy year
qq, q quarter
mm, m month
wk, ww week
(हफ्तों से सावधान रहें:शुरुआती दिन सर्वर सेटिंग्स पर निर्भर करता है।)
तकनीकी विवरण
यह 1900 के बाद से DATEDIFF(yy, 0, GETDATE())
के साथ वर्षों की संख्या का पता लगाकर काम करता है। और फिर उसे शून्य की तारीख में जोड़कर =1 जनवरी, 1900। इसे GETDATE()
के स्थान पर एक मनमानी तिथि के लिए कार्य में बदला जा सकता है। DATEDIFF(...)
. को प्रतिस्थापित करके भाग या एक मनमाना वर्ष "वर्ष - 1900" के साथ कार्य करें।
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015