इस लेख में समय . को परिवर्तित करने के उदाहरण हैं स्मॉलडेटटाइम . के लिए मान SQL सर्वर में मान।
जब आप समय . को रूपांतरित करते हैं स्मॉलडेटटाइम . के लिए मान , दिनांक '1900-01-01' पर सेट है, और घंटे और मिनट के मानों को पूर्णांकित किया जाता है। सेकंड और भिन्नात्मक सेकंड 0 पर सेट हैं।
उदाहरण 1 - CAST () का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है समय . से स्पष्ट रूप से रूपांतरित करने के लिए कथन करने के लिए स्मॉलडेटटाइम .
DECLARE @thetime time; SET @thetime = '23:15:59.1234567'; SELECT @thetime AS 'time', CAST(@thetime AS smalldatetime) AS 'smalldatetime';
परिणाम:
+------------------+---------------------+ | time | smalldatetime | |------------------+---------------------| | 23:15:59.1234567 | 1900-01-01 23:16:00 | +------------------+---------------------+
तो एक तारीख का हिस्सा जोड़ा जाता है और '1900-01-01' पर सेट किया जाता है, और इस मामले में मिनट के मानों को गोल किया जाता है और सेकंड को 0 पर सेट किया जाता है।
Microsoft दस्तावेज़ कहता है कि भिन्नात्मक सेकंड भी शून्य पर सेट होते हैं, लेकिन स्मॉलडेटटाइम डेटा प्रकार में वैसे भी भिन्नात्मक सेकंड शामिल नहीं होते हैं।
वैसे, जब भी आप smalldatetime . का उपयोग करते हैं डेटा प्रकार, सेकंड घटक हमेशा 0 पर सेट होता है।
उदाहरण 2 - घंटे को पूरा करना
यहाँ समय का एक उदाहरण दिया जा रहा है:
DECLARE @thetime time(0); SET @thetime = '10:59:59'; SELECT @thetime AS 'time', CAST(@thetime AS smalldatetime) AS 'smalldatetime';
परिणाम:
+----------+---------------------+ | time | smalldatetime | |----------+---------------------| | 10:59:59 | 1900-01-01 11:00:00 | +----------+---------------------+
इस मामले में मैंने समय मान के लिए 0 का एक पैमाना भी निर्दिष्ट किया है, हालांकि, यह परिणाम को प्रभावित नहीं करता है।
स्पष्ट होने के लिए, पैमाना किसी संख्या में दशमलव बिंदु के दाईं ओर अंकों की संख्या है। परिशुद्धता संख्या में अंकों की कुल संख्या है। जब हम 0 का पैमाना निर्दिष्ट करते हैं, तो इसका मतलब है कि भिन्नात्मक भाग शामिल नहीं है।
उदाहरण 3 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
का उपयोग करके एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thetime time; SET @thetime = '23:15:59.1234567'; SELECT @thetime AS 'time', CONVERT(smalldatetime, @thetime) AS 'smalldatetime';
परिणाम:
+------------------+---------------------+ | time | smalldatetime | |------------------+---------------------| | 23:15:59.1234567 | 1900-01-01 23:16:00 | +------------------+---------------------+
उदाहरण 4 - निहित रूपांतरण
यहाँ एक ही काम करने का एक उदाहरण है, लेकिन एक अंतर्निहित प्रकार के रूपांतरण का उपयोग करना।
DECLARE @thetime time, @thesmalldatetime smalldatetime; SET @thetime = '23:15:59.1234567'; SET @thesmalldatetime = @thetime; SELECT @thetime AS 'time', @thesmalldatetime AS 'smalldatetime';
परिणाम:
+------------------+---------------------+ | time | smalldatetime | |------------------+---------------------| | 23:15:59.1234567 | 1900-01-01 23:16:00 | +------------------+---------------------+
इसलिए हमें एक ही परिणाम मिलता है, भले ही यह एक स्पष्ट या निहित रूपांतरण हो।
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से रूपांतरित करने के लिए रूपांतरण फ़ंक्शन का उपयोग नहीं कर रहे हैं। हम केवल एक डेटा प्रकार के एक चर से दूसरे डेटा प्रकार के एक चर के लिए मान निर्दिष्ट कर रहे हैं। इस मामले में, जब हम समय . असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है स्मॉलडेटटाइम . के लिए मान चर।
उदाहरण 5 - तारीख बदलें
यदि आपको तिथि बदलने की आवश्यकता है (लेकिन एक ही समय रखें), तो आप DATEADD()
का उपयोग कर सकते हैं समारोह।
DECLARE @thetime time, @thesmalldatetime smalldatetime; SET @thetime = '23:15:59.1234567'; SET @thesmalldatetime = @thetime; SET @thesmalldatetime = DATEADD(year, 85, @thesmalldatetime); SELECT @thetime AS 'time', @thesmalldatetime AS 'smalldatetime';
परिणाम:
+------------------+---------------------+ | time | smalldatetime | |------------------+---------------------| | 23:15:59.1234567 | 1985-01-01 23:16:00 | +------------------+---------------------+
इस मामले में मैं वर्ष के मूल्य में 85 जोड़ता हूं, जो इसे 1985 तक लाता है।
हालांकि जागरूक रहें, कि स्मॉलडेटटाइम एक बहुत ही संकीर्ण दिनांक सीमा का समर्थन करता है (1900-01-01 से 2079-06-06 तक), इसलिए वर्ष में बहुत अधिक जोड़ने से एक अतिप्रवाह त्रुटि हो सकती है जैसे नीचे दी गई है:
DECLARE @thetime time, @thesmalldatetime smalldatetime; SET @thetime = '23:15:59.1234567'; SET @thesmalldatetime = @thetime; SET @thesmalldatetime = DATEADD(year, 220, @thesmalldatetime); SELECT @thetime AS 'time', @thesmalldatetime AS 'smalldatetime';
परिणाम:
Adding a value to a 'smalldatetime' column caused an overflow.