यह आलेख सबसे सामान्य ट्रांजैक्ट-एसक्यूएल दिनांक कार्यों में से एक का उपयोग करने की बुनियादी समझ विकसित करने पर केंद्रित है:DATEADD, DATEDIFF, और DATEPART।
इस लेख में, मैंने कुछ दिलचस्प परिदृश्यों के बाद दैनिक तिथि जोड़तोड़ में इन तिथि कार्यों का ठीक से उपयोग करने के महत्व पर भी जोर दिया, जिसमें इन तारीख कार्यों को थोड़ा जटिल तिथि गणनाओं को हल करने के लिए सहयोगी तरीके से उपयोग किया जा सकता है।
चूंकि ये फ़ंक्शन मुख्य रूप से दिनांक जोड़तोड़ में उपयोग किए जाते हैं, आइए पहले यह समझने की कोशिश करें कि दिनांक हेरफेर से हमारा क्या मतलब है।
तिथि हेरफेर को समझना
दिनांक-समय मानों को अक्सर आवश्यकता के अनुसार संशोधित करने की आवश्यकता होती है, और दिनांक-समय की गणना को संशोधित करने या संभालने या नियंत्रित करने की विधि को दिनांक हेरफेर के रूप में जाना जाता है।
हम इस स्थिति (दिनांक हेरफेर) का भी उल्लेख करते हैं जब किसी डेटाबेस से दिनांक मान को पढ़ा जाता है और फिर इसे फिर से संग्रहीत करने से पहले संशोधित किया जाता है।
ग्राहक-आदेश परिदृश्य
दिनांक हेरफेर का एक दिलचस्प उदाहरण ग्राहक-आदेश . है परिदृश्य, जब एक आदेश एक ग्राहक . द्वारा रखा गया संसाधित किया जाता है, वितरण तिथि आदेश दिनांक . से 5 दिन पहले सेट किया जाना चाहिए , तो इसका मतलब है कि डेवलपर को आदेश दिनांक में हेरफेर (संशोधित) करने के लिए T-SQL दिनांक फ़ंक्शन का उपयोग करना चाहिए डिलीवरी की तारीख की गणना करने के लिए ।
नमूना दैनिक बिक्री रिपोर्ट
थोड़ा जटिल उदाहरण तब होता है जब कोई व्यावसायिक उपयोगकर्ता दैनिक बिक्री रिपोर्ट . चलाता है अगर यह कल के परिणाम दिखाता है।
उदाहरण के लिए, यदि हम दैनिक बिक्री रिपोर्ट . चलाते हैं रविवार को 11:00 बजे, यह हमें शनिवार के आधार पर परिणाम दिखाएगा, और यदि हम इसे शनिवार को 17:00 बजे चलाते हैं, तो यह हमें शुक्रवार को सभी परिणाम दिखाएगा, क्योंकि वर्तमान दिन अभी समाप्त नहीं हुआ है और सबसे हाल का है पूरा दिन उपलब्ध कल है। वित्तीय रिपोर्ट सहित अधिकांश पेशेवर दैनिक रिपोर्ट्स को इस प्रकार चलाने के लिए डिज़ाइन किया गया है।
इस उदाहरण में, वर्तमान तिथि पिछली तिथि प्राप्त करने के लिए हेरफेर (संशोधित) किया जाता है, जिसमें पूरे दिन के लिए बिक्री रिकॉर्ड होते हैं।
उदाहरणों को लागू करना
कृपया उपरोक्त उदाहरणों को ध्यान में रखें क्योंकि जब हम इस आलेख में वर्णित कुछ सबसे सामान्य तिथि कार्यों का उपयोग करने की अच्छी समझ प्राप्त कर लेंगे तो हम इन परिदृश्यों को लागू करने जा रहे हैं।
तिथि कार्यों को समझना
आइए पहले कुछ बुनियादी तिथि कार्यों को देखें जो हमें तारीख में हेरफेर की आवश्यकताओं को पूरा करने में मदद कर सकते हैं, जैसे कि दो तिथियों (आदेश की तारीख और डिलीवरी की तारीख) के बीच के दिनों का निर्धारण करना, वर्तमान तिथि के आधार पर पिछले सप्ताह के बिक्री रिकॉर्ड प्राप्त करना या इसके आधार पर अपेक्षित समाप्ति तिथि की गणना करना। उत्पादन की तारीख वगैरह।
चूंकि कोई कठोर और तेज़ नियम नहीं हैं, इसलिए हम पहले DATEPART फ़ंक्शन को एक्सप्लोर करना शुरू करते हैं।
DATEPART फ़ंक्शन का उपयोग करना
सरल परिभाषा
DATEPART फ़ंक्शन का उपयोग किसी दिए गए दिनांक के एक भाग को संख्यात्मक मान में वापस करने के लिए किया जाता है।
भाग तारीख का दिन, तारीख का महीना, तारीख का साल आदि हो सकता है।
उदाहरण के लिए, हम DATEPART फ़ंक्शन का उपयोग किसी दिए गए दिनांक का दिन प्राप्त करने के लिए यह निर्धारित करने के लिए कर सकते हैं कि कोई आदेश रविवार को दिया गया था या नहीं।
एक अन्य उदाहरण किसी दिए गए दिनांक के महीने को आगे की प्रक्रिया के लिए किसी अन्य दिनांक फ़ंक्शन पर पास करने के लिए प्राप्त करना है।
माइक्रोसॉफ्ट परिभाषा
यह फ़ंक्शन निर्दिष्ट डेटपार्ट . का प्रतिनिधित्व करने वाला एक पूर्णांक देता है निर्दिष्ट तारीख . के ।
संगतता
Microsoft दस्तावेज़ के अनुसार, यह फ़ंक्शन निम्न SQL सर्वर संस्करणों के साथ संगत है:
- एसक्यूएल सर्वर 2008 प्लस
- Azure SQL डेटाबेस
- Azure SQL डेटा वेयरहाउस
- समानांतर डेटा वेयरहाउस
वाक्यविन्यास
DATEPART (datepart , date)
उदाहरण 1:दिनांक का वर्ष भाग प्राप्त करना
आइए हम एक निश्चित तिथि भी परिभाषित करें (आदेश दिनांक ) DATEPART फ़ंक्शन का उपयोग करके अपना वांछित भाग (दिन, महीना, वर्ष) प्राप्त करने के लिए।
ऑर्डर तिथि का वर्ष प्राप्त करने के लिए, हम बस YEAR . पास करते हैं उसके बाद आदेश दिनांक (@OrderDate) DATEPART . में इस प्रकार कार्य करें:
--आदेश दिनांकDECLARE @OrderDate DATETIME2='2017-01-11'-- आदेश प्राप्त करने का वर्ष दिनांक चुनें DATEPART(YEAR,@OrderDate) को Year_OrderDate के रूप में परिभाषित करें
उदाहरण 2:महीने का हिस्सा प्राप्त करना
अगर हम तारीख का महीना जानना चाहते हैं तो माह DATEPART . में पारित करने की आवश्यकता है इस प्रकार कार्य करें:
--आदेश दिनांकDECLARE परिभाषित करें @OrderDate DATETIME2='2017-01-11'-- आदेश का माह प्राप्त करना दिनांक चुनें DATEPART(MONTH,@OrderDate) को Month_OrderDate के रूप में
उदाहरण 3:डे पार्ट प्राप्त करना
तिथि का दिन भाग खोजने के लिए, बस DAY . पास करें DATEPART . में इस प्रकार कार्य करें:
--आदेश दिनांकDECLARE @OrderDate DATETIME2='2017-01-11'-- आदेश प्राप्त करने का दिन दिनांक चुनें DATEPART(DAY,@OrderDate) को Day_OrderDate के रूप में परिभाषित करें
उदाहरण 4:सप्ताह दिवस भाग प्राप्त करना
सप्ताह दिवस को तिथि का भाग प्राप्त करने के लिए, बस सप्ताह का दिन . पास करें DATEPART . में इस प्रकार कार्य करें:
--आदेश दिनांकDECLARE परिभाषित करें @OrderDate DATETIME2='2017-01-11'-- आदेश दिनांक का सप्ताह दिवस प्राप्त करना DATEPART(WEEKDAY,@OrderDate) को WeekDay_OrderDate के रूप में चुनें
हमें 4 मिल रहे हैं, जो बुधवार से रविवार से शुरू हो रहा है, जो कि 1 है।
इसी तरह, हम तारीख का एक चौथाई, घंटा, मिनट, दूसरा भाग भी प्राप्त कर सकते हैं।
आइए अगली तिथि समारोह पर चलते हैं।
DATEADD फ़ंक्शन का उपयोग करना
सरल परिभाषा
DATEADD फ़ंक्शन का उपयोग किसी तिथि को जोड़ने या घटाने के लिए किया जाता है।
उदाहरण के लिए, हम पता लगा सकते हैं कि चार दिन बाद या चार दिन पहले की तारीख क्या होगी।
यह उन परिदृश्यों में बहुत आसान है जहां किसी निश्चित तिथि के आधार पर अपेक्षित तिथि की गणना की जानी चाहिए जैसे सदस्यता समाप्ति तिथि पंजीकरण तिथि से ठीक एक वर्ष होनी चाहिए।
एक अन्य उदाहरण पाठ्यक्रम की समाप्ति तिथि की गणना करना है जो पाठ्यक्रम शुरू होने की तारीख के ठीक दो महीने बाद होनी चाहिए।
माइक्रोसॉफ्ट परिभाषा
यह फ़ंक्शन एक निर्दिष्ट संख्या जोड़ता है मान (एक हस्ताक्षरित पूर्णांक के रूप में) एक निर्दिष्ट तारीख . के लिए इनपुट की तारीख मान, और फिर उस संशोधित मान को लौटाता है।
संगतता
Microsoft दस्तावेज़ के अनुसार, यह फ़ंक्शन निम्न SQL सर्वर संस्करणों के साथ संगत है:
- एसक्यूएल सर्वर 2008 प्लस
- Azure SQL डेटाबेस
- Azure SQL डेटा वेयरहाउस
- समानांतर डेटा वेयरहाउस
वाक्यविन्यास
DATEADD (डेटपार्ट, नंबर, डेट)
डेटपार्ट तारीख का कोई भी हिस्सा है जैसे दिन, महीना, साल, सप्ताह का दिन, घंटा आदि।
संख्या तब जोड़े या घटाए जाने वाले दिनांक भाग (दिन, माह, वर्ष आदि) की संख्या होती है
दिनांक एक दी गई तिथि है जिसे DATEADD फ़ंक्शन का उपयोग करके जोड़ा या घटाया जाना है
उदाहरण 1:अगले वर्ष की तिथि प्राप्त करना
आइए हम एक निश्चित तिथि (पंजीकरण तिथि) को भी परिभाषित करें जिसे DATEADD का उपयोग करके जोड़ा या घटाया जा रहा है आवश्यकताओं के आधार पर कार्य करें।
अगले साल की तारीख साल के डेटपार्ट में 1 जोड़कर प्राप्त की जा सकती है।
पंजीकरण तिथि से अगला वर्ष प्राप्त करने के लिए, हम बस DatePart वर्ष . जोड़ते हैं उसके बाद 1 और उसके बाद पंजीकरण तिथि (@RegistrationDate) DATEADD . में इस प्रकार कार्य करें:
--पंजीकरण तिथि परिभाषित करेंDECLARE @RegDate DATETIME2='2018-07-10'--पंजीकरण तिथि से अगला वर्ष प्राप्त करना DATEADD(YEAR,1,@RegDate) को NextYear_RegDate के रूप में चुनें
उदाहरण 2:अगले महीने की तारीख प्राप्त करना
अगले महीने की तारीख पाने के लिए, MONTH पास करें DATEADD . का दिनांक भाग फ़ंक्शन के बाद महीनों की संख्या जो हम जोड़ना चाहते हैं उसके बाद दी गई तारीख जो हमारे मामले में पंजीकरण तिथि (RegDate) है।
--पंजीकरण तिथि परिभाषित करेंDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Show Registration Date-- Registeratoin date से अगला महीना प्राप्त करना DATEADD(MONTH,1,@RegDate) को NextMonth_RegDate के रूप में चुनें
उदाहरण 3:अगले दिन की तारीख प्राप्त करना
यदि पाठ्यक्रम पंजीकरण के अगले (अगले) दिन शुरू होता है, तो हमें DAY . पास करना होगा 1 . के साथ चूंकि अगले दिन पंजीकरण की तारीख में एक और दिन जुड़ जाता है, जो इस प्रकार प्रदर्शित होता है:
--पंजीकरण तिथि परिभाषित करेंDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- पंजीकरण तिथि दिखाएं-- पंजीकरण तिथि से अगला दिन प्राप्त करना DATEADD(DAY,1,@RegDate) को NextDAY_RegDate के रूप में चुनें
उदाहरण 4:दैनिक बिक्री रिपोर्ट दिनांक सेट करना
आइए अब थोड़ा जटिल परिदृश्य पर ध्यान दें जो अक्सर दैनिक वित्तीय रिपोर्ट के विकास में उपयोग किया जाता है।
अगर हम एक दैनिक बिक्री रिपोर्ट बनाना चाहते हैं, तो उसे कल का डेटा दिखाना चाहिए, क्योंकि वर्तमान दिन अभी पूरा नहीं हुआ है और सबसे हालिया पूरा दिन कल है जैसा कि इस लेख की शुरुआत में चर्चा की गई है।
अंत में, हमें रिपोर्ट के लिए पूरे दिन को कवर करना आसान बनाने के लिए कल के दिनांक समय को केवल दिनांक मान में बदलने की आवश्यकता है।
आज की तिथि के आधार पर कल की तिथि प्राप्त करने के लिए, हमें वर्तमान तिथि में "-1 दिन" जोड़ना होगा:
-- वर्तमान दिनांक को परिभाषित करेंDECLARE @CurrentDate DATETIME2=GETDATE()चुनें @CurrentDate as CurrentDate -- पंजीकरण दिनांक दिखाएं-- कल दिनांक और समय वर्तमान तिथि से प्राप्त करना DATEADD(DAY,-1,@CurrentDate) को कल दिनांक के रूप में चुनें_CurrentDate-- कनवर्ट करना कल दिनांक समय में केवल तिथि का चयन करें CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE) को कल दिनांकOnly_CurrentDateके रूप में चुनें
DatedIFF फ़ंक्शन का उपयोग करना
सरल परिभाषा
DATEDIFF फ़ंक्शन का उपयोग दो तिथियों के बीच दिनों, महीनों, वर्षों, घंटों आदि के अंतर को निर्धारित करने के लिए किया जाता है।
उदाहरण के लिए, हम यह पता लगा सकते हैं कि दो तिथियों के बीच कितने दिन बीत चुके हैं।
यह उन परिदृश्यों में भी बहुत उपयोगी है जहां हमें अपेक्षित ऑर्डर डिलीवरी तिथि और वास्तविक ऑर्डर डिलीवरी तिथि के बीच अंतर की जांच करने की आवश्यकता होती है।
एक अन्य उदाहरण टाइम ट्रैकिंग है, जिसका अर्थ है कि यह समझना कि किसी विशेष परियोजना के अब तक शुरू होने के बाद से कितने घंटे खर्च किए गए हैं।
माइक्रोसॉफ्ट परिभाषा
यह फ़ंक्शन निर्दिष्ट प्रारंभ दिनांक के बीच पार की गई निर्दिष्ट दिनांक भाग सीमाओं की गणना (एक हस्ताक्षरित पूर्णांक मान के रूप में) देता है और समाप्ति तिथि ।
संगतता
Microsoft दस्तावेज़ के अनुसार, यह फ़ंक्शन निम्न SQL सर्वर संस्करणों के साथ संगत है:
- एसक्यूएल सर्वर 2008 प्लस
- Azure SQL डेटाबेस
- Azure SQL डेटा वेयरहाउस
- समानांतर डेटा वेयरहाउस
वाक्यविन्यास
DATEDIFF ( datepart , startdate , enddate )
डेटपार्ट तारीख का कोई भी हिस्सा है जैसे दिन, महीना, साल, सप्ताह का दिन, घंटा आदि।
उदाहरण 1:दिनों में अंतर को समझना
आइए समझने की कोशिश करें कि DATEDIFF फ़ंक्शन काम करता है।
यदि हम 01 जुलाई 2018 और 02 जुलाई 2018 के बीच के दिनों में अंतर का पता लगाने की कोशिश करते हैं, तो हमें 1 दिन मिलेगा, जिसका अर्थ है कि यह अंतर प्राप्त करने के लिए प्रारंभ तिथि से समाप्ति तिथि घटाता है:
दिनांक चुनें
उदाहरण 2:ऑर्डर और डिलीवरी के बीच के दिनों को प्राप्त करना
आइए दो अलग-अलग तिथियों को परिभाषित करें, आदेश तिथि और डिलीवरी तिथि, जिसका उपयोग दिनों, महीनों, वर्षों, घंटों आदि में अंतर निर्धारित करने के लिए किया जाएगा।
ऑर्डर की तारीख और डिलीवरी की तारीख के बीच दिनों की संख्या जानने के लिए, DAY डेटपार्ट को DATEDIFF में पास कर दिया जाता है फ़ंक्शन के बाद आरंभ तिथि (आदेश दिनांक) और समाप्ति तिथि (डिलीवरी तिथि) :
-- ऑर्डर की तारीख और ऑर्डर की डिलीवरी की तारीख को परिभाषित करेंDECLARE @OrderDate DATETIME2='28 जुलाई 2018'DECLARE @DeliveryDate DATETIME2='07 अगस्त 2018'चुनें @OrderDate as OrderDate,@DeliveryDate as डिलीवरीDate-- ऑर्डर और डिलीवरी की तारीखें दिखाएं-- ऑर्डर की तारीख और डिलीवरी की तारीख के बीच के दिनों में अंतर प्राप्त करना DATEDIFF(DAY,@OrderDate,@DeliveryDate) को Days_Between_Order_and_Delivery के रूप में चुनें
उदाहरण 3:प्रोजेक्ट घंटे (समय ट्रैकिंग) प्राप्त करना
यह DATEDIFF फ़ंक्शन का उपयोग करके समय पर नज़र रखने का एक दिलचस्प उदाहरण है।
उदाहरण के लिए, हम यह जानने में रुचि रखते हैं कि हमने किसी विशेष परियोजना पर कुल कितने दिन और घंटे घंटों और दिनों में बिताए हैं, और फिर हम पहले DAY दिनांक भाग को DATEDIFF फ़ंक्शन में पास करने जा रहे हैं, जहाँ प्रारंभ दिनांक है तिथि जब परियोजना शुरू हुई और अंतिम तिथि आज की तारीख है जिसके बाद HOUR पास करना और फिर MINUTE पास करना इस प्रकार है:
-- प्रोजेक्ट प्रारंभ दिनांक परिभाषित करेंDECLARE @ProjectStartDate DATETIME2='10 Nov 2018'चुनें @ProjectStartDate AS ProjectStartDate-- प्रोजेक्ट प्रारंभ दिनांक दिखाएं-- प्रोजेक्ट पर अब तक खर्च किए गए दिनों की संख्या प्राप्त करना DATEDIFF(DAY,@ProjectStartDate,GETDATE(दिन, @ProjectStartDate, GETDATE ( )) Project_Days_So_Far के रूप में-- प्रोजेक्ट पर अब तक खर्च किए गए घंटों की संख्या प्राप्त करना DATEDIFF (HOUR, @ ProjectStartDate, GETDATE ()) को Project_Hours_So_Far के रूप में चुनें - अब तक प्रोजेक्ट पर खर्च किए गए मिनटों की संख्या प्राप्त करना चुनें DATEDIFF (मिनट, @ प्रोजेक्टस्टार्टडेट, GETDATE ( )) Project_Minutes_So_Far. के रूप में
बधाई हो, आपने DATEADD, DATEDIFF, और DATEPART T-SQL फ़ंक्शंस का उपयोग करना सफलतापूर्वक सीख लिया है।
करने के लिए चीज़ें
अब जब आप कुछ बुनियादी तिथि कार्यों से परिचित हो गए हैं, तो कृपया नीचे दी गई चीजों को आजमाकर खुद को चुनौती दें:
- कृपया मेरा पिछला लेख देखें यूनिट टेस्टिंग रिपोर्ट प्रक्रियाएं - एक नमूना SQLDevBlogReportTDD डेटाबेस सेट करने के लिए TDDD भाग-4 प्रारंभ करें, और फिर लेखक पंजीकरण तिथि के आधार पर महीनों की संख्या जानने के लिए एक दृश्य बनाएं।
ली>- कृपया मेरे पिछले लेख का संदर्भ लें यूनिट परीक्षण को सरल बनाना मुख्य संग्रहित प्रक्रिया जो एक नमूना SQLBookShop डेटाबेस बनाने के लिए एक उपयोगिता प्रक्रिया को भी कहते हैं और डिलीवरी दिनांक जोड़ें बुकऑर्डर . पर कॉलम तालिका, और फिर एक नई संग्रहीत कार्यविधि बनाएँ ProcessOrder जो DATEADD . का उपयोग करता है आदेश की तारीख के पांच दिन बाद अपेक्षित वितरण जोड़ने के लिए कार्य करें।
- कृपया मेरे पिछले लेख पर एक नज़र डालें, जंप टू स्टार्ट टेस्ट-ड्रिवेन डेटाबेस डेवलपमेंट (TDDD) - भाग 3 और नमूना SQLDevBlogReportTDD डेटाबेस में डेटा को संशोधित करके DATEADD T-SQL फ़ंक्शन का उपयोग करके एक दैनिक रिपोर्ट बनाने का प्रयास करें ताकि रिपोर्ट में प्रदर्शित करने के लिए पर्याप्त डेटा है।