Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में यूनिक्स टाइमस्टैम्प को दिनांक/समय मान में कैसे परिवर्तित करें

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में एक डेटाबेस से दूसरे डेटाबेस में टेबल कॉपी करें

  2. MySQL - तालिका बनाते समय एक साथ उपयोग किए जाने पर प्राथमिक कुंजी, अद्वितीय कुंजी और कुंजी का अर्थ

  3. SQL सर्वर में दिनांक से लघु माह का नाम प्राप्त करने के 5 तरीके

  4. CAST () का उपयोग करके SQL सर्वर में दिनांक स्वरूपों के बीच कनवर्ट कैसे करें

  5. प्रति समूह पहली पंक्ति का चयन