SQL सर्वर में, हम दिए गए यूनिक्स टाइमस्टैम्प के आधार पर दिनांक और समय वापस करने के लिए निम्न विधि का उपयोग कर सकते हैं।
यूनिक्स टाइमस्टैम्प (यूनिक्स युग समय, यूनिक्स समय, या पॉज़िक्स समय के रूप में भी जाना जाता है) सेकंड की संख्या है जो 00:00:00 गुरुवार, 1 जनवरी 1970, कोऑर्डिनेटेड यूनिवर्सल टाइम (यूटीसी) के बाद से बीत चुके हैं।
उदाहरण
यहां यूनिक्स टाइमस्टैम्प को दिनांक/समय मान में बदलने का एक उदाहरण दिया गया है:
SELECT DATEADD(s, 1860935119, '1970-01-01');
परिणाम:
2028-12-20 14:25:19.000
इस मामले में, यूनिक्स टाइमस्टैम्प 1860935119 था, जो 2028-12-20 14:25:19.000 की तारीख और समय में अनुवादित हुआ।
वर्तमान दिनांक/समय
यहां एक उदाहरण दिया गया है जो वर्तमान दिनांक/समय के आधार पर यूनिक्स टाइमस्टैम्प का उपयोग करता है:
SELECT DATEADD(s, DATEDIFF(s, '1970-01-01', GETUTCDATE()), '1970-01-01');
परिणाम:
2022-04-18 00:31:46.000
ध्यान रहे, यह अतिश्योक्तिपूर्ण है, क्योंकि हम निम्नलिखित कार्य कर सकते थे:
SELECT GETUTCDATE();
बड़ा यूनिक्स टाइमस्टैम्प
जब निम्न जैसे बड़े यूनिक्स टाइमस्टैम्प मान का सामना करना पड़ता है:
SELECT DATEADD(s, 1867914562715876900, '1970-01-01');
हमें इस तरह एक अतिप्रवाह त्रुटि मिल सकती है:
Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type int.
ऐसा इसलिए है क्योंकि यूनिक्स टाइमस्टैम्प मान एक पूर्णांक के मान से बड़ा है। इस यूनिक्स टाइमस्टैम्प में नैनोसेकंड सटीक है और इसमें पूर्णांक के लिए बहुत अधिक अंक हैं।
इससे निपटने के लिए हमारे पास कुछ विकल्प हैं। एक विकल्प सटीकता को कम करना है:
DECLARE @ts bigint = 1867914562715876900;
SELECT DATEADD(s, CONVERT(int, LEFT(@ts, 10)), '1970-01-01');
परिणाम:
2029-03-11 09:09:22.000
यहां, हमने LEFT()
. का उपयोग किया है केवल पहले दस अंक, साथ ही CONVERT()
. को वापस करने के लिए कार्य करता है एक पूर्णांक वापस करने के लिए कार्य करें।
अगर हम सटीकता को कम नहीं करना चाहते हैं, तो हम कुछ ऐसा कर सकते हैं:
DECLARE @ts bigint = 1867914562715876900;
SELECT DATEADD(
ns,
@ts % 1000000000,
DATEADD( s, @ts / 1000000000, CAST('1970-01-01' as datetime2(7)) )
);
परिणाम:
2029-03-11 09:09:22.7158769