इस लेख में छोटे दिनांक समय . को रूपांतरित करने के उदाहरण हैं एक समय . के लिए मूल्य SQL सर्वर में मान।
जब आप एक छोटे दिनांक समय . को रूपांतरित करते हैं समय . के लिए मान , आप तारीख खो देते हैं। घंटे, मिनट और सेकंड कॉपी किए जाते हैं। भिन्नात्मक सेकंड 0 पर सेट होते हैं।
स्मॉलडेटटाइम डेटा प्रकार में दिनांक और समय दोनों शामिल हैं। हालाँकि, समय में कोई भिन्नात्मक सेकंड नहीं होता है, और इसका सेकंड घटक हमेशा शून्य (:00) पर सेट होता है। इसकी सटीकता निकटतम मिनट तक है। इसका स्टोरेज साइज 4 बाइट्स है।
समय दूसरी ओर डेटा प्रकार में केवल समय शामिल होता है। हालांकि, यह आपको 0 से 7 तक एक भिन्नात्मक सेकंड सटीकता निर्दिष्ट करने की अनुमति देता है। यह समय(n का उपयोग करके प्राप्त किया जाता है। ) सिंटैक्स, जहां n 0 से 7 तक का पैमाना है। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह 7 (डिफ़ॉल्ट) का उपयोग करेगा, जो 100 नैनोसेकंड की सटीकता प्रदान करता है। यदि आप शून्य निर्दिष्ट करते हैं (0
), इसकी सटीकता निकटतम सेकंड तक होगी। इसका भंडारण आकार या तो 3, 4, या 5 बाइट्स (सटीकता को स्टोर करने के लिए 1 बाइट) होगा, जो आंशिक सेकंड की सटीकता पर निर्भर करता है।
उदाहरण 1 - निहित रूपांतरण
यहां डेटाटाइम . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और समय .
DECLARE @thesmalldatetime smalldatetime, @thetime time; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thetime AS 'time';
परिणाम:
+---------------------+----------+ | smalldatetime | time | |---------------------+----------| | 2025-05-21 10:16:00 | 10:16:00 | +---------------------+----------+
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम smalldatetime असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है। एक समय . के लिए मूल्य चर।
इस परिणाम के बारे में सबसे स्पष्ट बात यह है कि समय मान में दिनांक शामिल नहीं है। यह अपेक्षित है, क्योंकि समय डेटा प्रकार केवल समय मान संग्रहीत करने के लिए है, दिनांक मान नहीं।
क्या है नहीं स्पष्ट (कम से कम मेरे उदाहरण के साथ) यह है कि समय मान वास्तव में एक भिन्नात्मक सेकंड भाग को संभाल सकता है। मेरा सिस्टम यहां भिन्नात्मक सेकंड प्रदर्शित नहीं करता है, लेकिन अगला उदाहरण दिखाएगा कि इसमें वास्तव में भिन्नात्मक सेकंड की सटीकता 7 है।
साथ ही, यदि आप बारीकी से देखें, तो आप देखेंगे कि स्मॉलडेटटाइम मान उस वास्तविक मान से मिनटों को गोल कर देता है जिसे मैं इसे असाइन करने का प्रयास कर रहा था। यह स्मॉलडेटटाइम . की अपेक्षाकृत कम सटीकता को दर्शाता है डेटा प्रकार। इसकी सटीकता निकटतम मिनट तक है। इसका स्पष्ट परिणाम यह है कि जब हम अंततः इसके मूल्य को समय . के लिए पुन:सौंप देते हैं डेटा प्रकार, यह राउंड अप वैल्यू है जिसे असाइन किया गया है - प्रारंभिक मान नहीं जिसे मैंने असाइन करने का प्रयास किया था। यदि हमने प्रारंभिक मान सीधे समय . को निर्दिष्ट किया होता चर, हमें अधिक सटीक मान प्राप्त होता (भले ही हमने 0 का पैमाना निर्दिष्ट किया हो)।
यहाँ मेरा मतलब है:
DECLARE @thesmalldatetime smalldatetime, @thetime time(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'smalldatetime', @thetime AS 'time';
परिणाम:
+---------------------+----------+ | smalldatetime | time | |---------------------+----------| | 2025-05-21 10:16:00 | 10:15:30 | +---------------------+----------+
उदाहरण 2 - भिन्नात्मक सेकंड जोड़ना
स्मॉलडेटटाइम डेटा प्रकार में आंशिक सेकंड का हिस्सा नहीं होता है, लेकिन हमारे पहले उदाहरण में, समय value में फ्रैक्शनल सेकंड्स की सटीकता 7 होती है (भले ही यह वास्तव में कोई दशमलव स्थान प्रदर्शित न करे)। मुझे इसकी सटीकता पता है क्योंकि मैंने इसे घोषित करते समय कोई पैमाना निर्दिष्ट नहीं किया था, इसलिए यह अपने डिफ़ॉल्ट पैमाने 7 का उपयोग करता है।
यह पुष्टि करने के लिए यहां एक उदाहरण दिया गया है कि समय value वास्तव में, एक भिन्नात्मक भाग का समर्थन कर सकता है:
DECLARE @thesmalldatetime smalldatetime, @thetime time; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thetime AS 'Original time', DATEADD(nanosecond, 123456700, @thetime) AS 'Modified time';
परिणाम:
+---------------------+-----------------+------------------+ | smalldatetime | Original time | Modified time | |---------------------+-----------------+------------------| | 2025-05-21 10:16:00 | 10:16:00 | 10:16:00.1234567 | +---------------------+-----------------+------------------+
ध्यान दें कि जब समय वैल्यू का स्केल 7 है, इसका स्टोरेज साइज 5 बाइट्स है। इसलिए, इसकी संग्रहण आवश्यकताएं स्मॉलडेटटाइम . की तुलना में अधिक हैं प्रकार (जो केवल 4 बाइट्स का उपयोग करता है)।
उदाहरण 3 - CAST() का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है स्मॉलडेटटाइम . के बीच स्पष्ट रूप से कनवर्ट करने के लिए स्टेटमेंट और समय .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30.125'; SELECT @thesmalldatetime AS 'smalldatetime', CAST(@thesmalldatetime AS time(0)) AS 'time(0)';
परिणाम:
+---------------------+-----------+ | smalldatetime | time(0) | |---------------------+-----------| | 2025-05-21 10:16:00 | 10:16:00 | +---------------------+-----------+
इस उदाहरण में मैंने स्केल को 0 पर सेट किया है।
उदाहरण 4 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
. का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30.125'; SELECT @thesmalldatetime AS 'smalldatetime', CONVERT(time(0), @thesmalldatetime) AS 'time(0)';
परिणाम:
+---------------------+-----------+ | smalldatetime | time(0) | |---------------------+-----------| | 2025-05-21 10:16:00 | 10:16:00 | +---------------------+-----------+