इस लेख में तारीख . को परिवर्तित करने के उदाहरण हैं स्मॉलडेटटाइम . के लिए मान SQL सर्वर में मान।
जब आप किसी तारीख . को रूपांतरित करते हैं स्मॉलडेटटाइम . के लिए मान , अतिरिक्त जानकारी को मूल्य में जोड़ा जाता है। ऐसा इसलिए है क्योंकि स्मॉलडेटटाइम डेटा प्रकार में दिनांक और समय दोनों की जानकारी होती है। तारीख दूसरी ओर, डेटा प्रकार में केवल तारीख की जानकारी होती है।
हालांकि, ऐसे मामले हैं जहां तारीख करने के लिए स्मॉलडेटटाइम रूपांतरण विफल हो सकता है। विशेष रूप से, यदि तारीख मान smalldatetime . द्वारा समर्थित सीमा से बाहर है तो यह एक त्रुटि के साथ विफल हो जाएगा।
किसी भी स्थिति में, इन दो डेटा प्रकारों के बीच कनवर्ट करने के उदाहरण नीचे दिए गए हैं।
उदाहरण 1 - निहित रूपांतरण
यहां तारीख . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और स्मॉलडेटटाइम .
DECLARE @thedate date, @thesmalldatetime smalldatetime SET @thedate = '2020-12-01' SET @thesmalldatetime = @thedate SELECT @thedate AS 'date', @thesmalldatetime AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00:00:00 | +------------+---------------------+
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम तिथि . असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है स्मॉलडेटटाइम . के लिए मान चर।
हम देख सकते हैं कि तारीख वैरिएबल में केवल तारीख की जानकारी होती है, जबकि स्मॉलडेटटाइम चर में दिनांक और समय दोनों की जानकारी होती है।
जब आप तारीख . के बीच कनवर्ट करते हैं और स्मॉलडेटटाइम , समय घटक 00:00:00
. पर सेट है . यह मिनट की सटीकता प्रदान करता है।
इसके सभी शून्य होने का कारण यह है कि दिनांक मान में किसी भी समय की जानकारी नहीं होती है, इसलिए SQL सर्वर के लिए यह जानने का कोई तरीका नहीं है कि आप किस समय चाहते हैं (यदि कोई हो)।
बेशक, आपको यह परिणाम भी मिलता है, भले ही आप किसी स्मॉलडेटटाइम को केवल केवल-दिनांक मान निर्दिष्ट करते हों रूपांतरण किए बिना:
DECLARE @thesmalldatetime smalldatetime = '2020-12-01' SELECT @thesmalldatetime AS 'smalldatetime';
परिणाम:
+---------------------+ | smalldatetime | |---------------------| | 2020-12-01 00:00:00 | +---------------------+
उदाहरण 2 - समय बदलें
यदि आपको एक समय निर्दिष्ट करने की आवश्यकता है (लेकिन एक ही तिथि रखें), तो आप DATEADD()
का उपयोग कर सकते हैं ऐसा करने के लिए कार्य करें।
DECLARE @thedate date, @thesmalldatetime smalldatetime SET @thedate = '2020-12-01' SET @thesmalldatetime = @thedate SET @thesmalldatetime = DATEADD(hour, 7, @thesmalldatetime) SELECT @thedate AS 'date', @thesmalldatetime AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
उदाहरण 3 - CAST() का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है तारीख . के बीच स्पष्ट रूप से रूपांतरित होने वाला कथन और स्मॉलडेटटाइम .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS smalldatetime) AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00:00:00 | +------------+---------------------+
निहित रूपांतरण के समान परिणाम।
हम समय को इस तरह भी समायोजित कर सकते हैं:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
उदाहरण 4 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
. का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(smalldatetime, @thedate) AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00:00:00 | +------------+---------------------+
और समय को एडजस्ट करना:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(smalldatetime, @thedate)) AS 'smalldatetime';
परिणाम:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
उदाहरण 5 - सीमा से बाहर त्रुटि
जैसा कि उल्लेख किया गया है, यदि दिनांक smalldatetime . द्वारा समर्थित सीमा से बाहर है डेटा प्रकार, आपको एक त्रुटि मिलेगी।
DECLARE @thedate date SET @thedate = '2080-12-01' SELECT @thedate AS 'date', CAST(@thedate AS smalldatetime) AS 'smalldatetime';
परिणाम:
The conversion of a date data type to a smalldatetime data type resulted in an out-of-range value.
स्मॉलडेटटाइम डेटा प्रकार केवल दिनांक सीमा 1900-01-01 से 2079-06-06 का समर्थन करता है।
साथ ही, स्मॉलडेटटाइम डेटा प्रकार केवल 00:00:00 से 23:59:59 तक की समय सीमा का समर्थन करता है, इसलिए यदि आप उस सीमा के बाहर किसी मान का उपयोग करने का प्रयास करते हैं तो आपको एक त्रुटि भी मिलेगी (उदाहरण के लिए, उच्च परिशुद्धता के साथ)।
उदाहरण:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(nanosecond, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';
परिणाम:
The datepart nanosecond is not supported by date function dateadd for data type smalldatetime.
हालांकि, इस मामले में, कनवर्ट करते समय यह कोई त्रुटि नहीं है, यह वास्तव में DATEADD()
का उपयोग करते समय एक त्रुटि है फ़ंक्शन (क्योंकि फ़ंक्शन उस विशेष डेटपार्ट को स्मॉलडेटटाइम . पर उपयोग करने की अनुमति नहीं देता है डेटा प्रकार)।