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

Oracle दिनांक डेटाटाइप, SQL के माध्यम से 'YYYY-MM-DD HH24:MI:SS TMZ' में रूपांतरित

आपके प्रश्न में कुछ भ्रम है:

  • एक Date डेटाटाइप समय क्षेत्र घटक को सहेजता नहीं है। जब आप TIMESTAMP WITH TIME ZONE डालते हैं तो यह जानकारी हमेशा के लिए काट दी जाती है और हमेशा के लिए खो जाती है। एक Date . में ।
  • जब आप किसी तिथि को स्क्रीन पर प्रदर्शित करना चाहते हैं या किसी वर्ण API (XML, फ़ाइल...) के माध्यम से किसी अन्य सिस्टम को भेजना चाहते हैं, तो आप TO_CHAR का उपयोग करते हैं समारोह। Oracle में, एक Date कोई प्रारूप नहीं है :यह समय की बात है।
  • पारस्परिक रूप से, आप TO_TIMESTAMP_TZ का उपयोग करेंगे एक VARCHAR2 . को कन्वर्ट करने के लिए एक TIMESTAMP . के लिए , लेकिन यह Date . को रूपांतरित नहीं करेगा एक TIMESTAMP . के लिए ।
  • आप FROM_TZ का उपयोग करते हैं समय क्षेत्र की जानकारी को TIMESTAMP . में जोड़ने के लिए (या Date )।
  • Oracle में, CST एक समय क्षेत्र है लेकिन CDT क्या नहीं है। CDT एक दिन के उजाले की बचत जानकारी है।
  • चीजों को और अधिक जटिल बनाने के लिए, CST/CDT (-05:00 ) और CST/CST (-06:00 ) स्पष्ट रूप से अलग-अलग मान होंगे, लेकिन समय क्षेत्र CST डिफ़ॉल्ट रूप से दिनांक के आधार पर दिन के उजाले की बचत जानकारी को इनहेरिट करेगा।

तो आपका रूपांतरण उतना आसान नहीं हो सकता जितना दिखता है।

यह मानते हुए कि आप एक Date को बदलना चाहते हैं d जो आप जानते हैं वह समय क्षेत्र CST/CST पर मान्य है समय क्षेत्र पर समतुल्य CST/CDT , आप उपयोग करेंगे:

SQL> SELECT from_tz(d, '-06:00') initial_ts,
  2         from_tz(d, '-06:00') at time zone ('-05:00') converted_ts
  3    FROM (SELECT cast(to_date('2012-10-09 01:10:21',
  4                              'yyyy-mm-dd hh24:mi:ss') as timestamp) d
  5            FROM dual);

INITIAL_TS                      CONVERTED_TS
------------------------------- -------------------------------
09/10/12 01:10:21,000000 -06:00 09/10/12 02:10:21,000000 -05:00

मेरे डिफ़ॉल्ट टाइमस्टैम्प प्रारूप का उपयोग यहां किया गया है। मैं स्पष्ट रूप से एक प्रारूप निर्दिष्ट कर सकता हूं:

SQL> SELECT to_char(from_tz(d, '-06:00'),'yyyy-mm-dd hh24:mi:ss TZR') initial_ts,
  2         to_char(from_tz(d, '-06:00') at time zone ('-05:00'),
  3                 'yyyy-mm-dd hh24:mi:ss TZR') converted_ts
  4    FROM (SELECT cast(to_date('2012-10-09 01:10:21',
  5                              'yyyy-mm-dd hh24:mi:ss') as timestamp) d
  6            FROM dual);

INITIAL_TS                      CONVERTED_TS
------------------------------- -------------------------------
2012-10-09 01:10:21 -06:00      2012-10-09 02:10:21 -05:00


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ट्रिगर हटाने के बाद... म्यूटेटिंग टेबल (ORA-04091) से कैसे बचें?

  2. बैचअपडेट अपवाद:बैच समाप्त नहीं होगा

  3. 12c पहचान कॉलम

  4. Oracle में रोमन अंकों में महीने को कैसे प्रारूपित करें

  5. ऑरैकल कनेक्शन खोलते समय, कनेक्शन ऑब्जेक्ट शून्य होता है