इस लेख में समय . को परिवर्तित करने के उदाहरण हैं एक डेटाटाइम . के लिए मान SQL सर्वर में मान।
जब आप समय . को रूपांतरित करते हैं डेटाटाइम . के लिए मान , अतिरिक्त जानकारी को मूल्य में जोड़ा जाता है। ऐसा इसलिए है क्योंकि डेटाटाइम डेटा प्रकार में दिनांक और समय दोनों की जानकारी होती है। समय दूसरी ओर, डेटा प्रकार में केवल समय की जानकारी होती है। इसलिए, जब आप ऐसा रूपांतरण करते हैं, तो दिनांक जानकारी को मान में जोड़ दिया जाता है। विशेष रूप से, तिथि '1900-01-01' पर सेट है।
उदाहरण 1 - CAST () का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है समय . से स्पष्ट रूप से रूपांतरित करने के लिए कथन से डेटाटाइम . तक .
DECLARE @thetime time SET @thetime = '23:15:59.004007' SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';
परिणाम:
+------------------+-------------------------+ | time | datetime | |------------------+-------------------------| | 23:15:59.0040070 | 1900-01-01 23:15:59.003 | +------------------+-------------------------+
जब आप समय . से रूपांतरित होते हैं से डेटाटाइम . तक , दिनांक घटक 1900-01-01
. पर सेट है .
यह भी ध्यान दें कि इन दोनों डेटा प्रकारों में समय मान को अलग-अलग तरीके से प्रस्तुत किया गया है। समय डेटा प्रकार अंत में एक शून्य जोड़ता है (क्योंकि इसकी उच्च परिशुद्धता है - इसका डिफ़ॉल्ट पैमाना 7 है)। दूसरी ओर, डेटाटाइम मान निम्न पैमाने का उपयोग करते हैं और .000, .003, या .007 सेकंड की वृद्धि के लिए पूर्णांकित किए जाते हैं। यदि आपको यह समस्यापूर्ण लगता है, तो datetime2 . में कनवर्ट करने पर विचार करें बजाय।
उदाहरण 2 - कम परिशुद्धता/पैमाना
पिछले उदाहरण में, समय मान में डेटाटाइम . की तुलना में उच्च भिन्नात्मक सेकंड सटीकता थी मूल्य। ऐसा इसलिए है क्योंकि यह 7 के डिफ़ॉल्ट पैमाने का उपयोग करता है। लेकिन यदि आवश्यक हो तो हम इसे कम मान में बदल सकते हैं।
स्पष्ट होने के लिए, पैमाना किसी संख्या में दशमलव बिंदु के दाईं ओर अंकों की संख्या है। परिशुद्धता संख्या में अंकों की कुल संख्या है। हम डेटा प्रकार के लिए कोष्ठक में किसी संख्या को जोड़कर स्केल निर्दिष्ट कर सकते हैं।
अगर मैं स्पष्ट रूप से समय . सेट करता हूं तो यहां क्या होता है? मान कम . होना चाहिए डेटाटाइम . से अधिक का पैमाना मूल्य।
DECLARE @thetime time(0) SET @thetime = '23:15:59.004007' SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';
परिणाम:
+----------+-------------------------+ | time | datetime | |----------+-------------------------| | 23:15:59 | 1900-01-01 23:15:59.000 | +----------+-------------------------+
उदाहरण 3 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यह पहले उदाहरण जैसा ही है, इस समय को छोड़कर मैं CONVERT()
. का उपयोग करता हूं CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thetime time SET @thetime = '23:15:59.004007' SELECT @thetime AS 'time', CONVERT(datetime, @thetime) AS 'datetime';
परिणाम:
+------------------+-------------------------+ | time | datetime | |------------------+-------------------------| | 23:15:59.0040070 | 1900-01-01 23:15:59.003 | +------------------+-------------------------+
उदाहरण 4 - निहित रूपांतरण
यहाँ एक ही काम करने का एक उदाहरण है, लेकिन एक अंतर्निहित प्रकार के रूपांतरण का उपयोग करना।
DECLARE @thetime time, @thedatetime datetime SET @thetime = '23:15:59.004007' SET @thedatetime = @thetime SELECT @thetime AS 'time', @thedatetime AS 'datetime';
परिणाम:
+------------------+-------------------------+ | time | datetime | |------------------+-------------------------| | 23:15:59.0040070 | 1900-01-01 23:15:59.003 | +------------------+-------------------------+
इसलिए हमें एक ही परिणाम मिलता है, भले ही यह एक स्पष्ट या निहित रूपांतरण हो।
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से रूपांतरित करने के लिए रूपांतरण फ़ंक्शन का उपयोग नहीं कर रहे हैं। हम केवल एक डेटा प्रकार के एक चर से दूसरे डेटा प्रकार के एक चर के लिए मान निर्दिष्ट कर रहे हैं। इस मामले में, जब हम समय . असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है एक डेटाटाइम . के लिए मान चर।
उदाहरण 5 - तारीख बदलें
यदि आपको तिथि बदलने की आवश्यकता है (लेकिन एक ही समय रखें), तो आप DATEADD()
का उपयोग कर सकते हैं समारोह।
DECLARE @thetime time, @thedatetime datetime SET @thetime = '23:15:59.004007' SET @thedatetime = @thetime SET @thedatetime = DATEADD(year, 120, @thedatetime) SELECT @thetime AS 'time', @thedatetime AS 'datetime';
परिणाम:
+------------------+-------------------------+ | time | datetime | |------------------+-------------------------| | 23:15:59.0040070 | 2020-01-01 23:15:59.003 | +------------------+-------------------------+
इस मामले में मैं वर्ष के मूल्य में 120 जोड़ता हूं, जो इसे 2020 तक लाता है।