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

TO_TIMESTAMP_TZ() Oracle में फ़ंक्शन

Oracle डेटाबेस में, TO_TIMESTAMP_TZ() फ़ंक्शन अपने तर्क को TIMESTAMP WITH TIME ZONE के मान में बदल देता है डेटा प्रकार।

सिंटैक्स

वाक्य रचना इस प्रकार है:

TO_TIMESTAMP_TZ(char [ DEFAULT return_value ON CONVERSION ERROR ]
  [, fmt [, 'nlsparam' ] ])

char तर्क कोई भी अभिव्यक्ति हो सकता है जो CHAR . के वर्ण स्ट्रिंग का मूल्यांकन करता है , VARCHAR2 , NCHAR , या NVARCHAR2 डेटा प्रकार।

वैकल्पिक fmt तर्क char . के प्रारूप को निर्दिष्ट करता है . अगर आप fmt . को छोड़ देते हैं , फिर char TIMESTAMP WITH TIME ZONE . के डिफ़ॉल्ट प्रारूप में होना चाहिए डेटा प्रकार, जो NLS_TIMESTAMP_TZ_FORMAT . द्वारा निर्धारित किया जाता है इनिशियलाइज़ेशन पैरामीटर (देखें कि अपने Oracle सत्र के दिनांक स्वरूप की जाँच कैसे करें)।

वैकल्पिक 'nlsparam' तर्क उस भाषा को निर्दिष्ट करता है जिसमें महीने और दिन के नाम और संक्षिप्त रूप दिए गए हैं। यह निम्नलिखित रूप लेता है:

'NLS_DATE_LANGUAGE = language'

उदाहरण

प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:

SELECT 
    TO_TIMESTAMP_TZ(
        '25-Aug-2030 18:10:35.123456789 +09:30', 
        'DD-Mon-RRRR HH24:MI:SS.FF TZH:TZM'
    )
FROM DUAL;

परिणाम:

25/AUG/30 06:10:35.123456789 PM +09:30

परिणाम का प्रारूप आपके सत्र के NLS_TIMESTAMP_TZ_FORMAT द्वारा निर्धारित किया जाता है पैरामीटर। हम NLS_TIMESTAMP_TZ_FORMAT . के मान की जांच कर सकते हैं V$NLS_PARAMETERS . को क्वेरी करके पैरामीटर देखें:

SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_TZ_FORMAT';

परिणाम:

DD/MON/RR HH12:MI:SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT . का डिफ़ॉल्ट मान पैरामीटर NLS_TERRITORY . से लिया गया है पैरामीटर। मेरे मामले में NLS_TERRITORY पैरामीटर है AUSTRALIA

जब मैं NLS_TERRITORY बदलता हूं, तो यहां बताया गया है दूसरे क्षेत्र के लिए पैरामीटर, फिर TO_TIMESTAMP_TZ() . पर कॉल करें फिर से:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT 
    TO_TIMESTAMP_TZ(
        '25-Aug-2030 18:10:35.123456789 +09:30', 
        'DD-Mon-RRRR HH24:MI:SS.FF TZH:TZM'
    )
FROM DUAL;

परिणाम:

25-AUG-30 06.10.35.123456789 PM +09:30

इस बार परिणाम एक अलग प्रारूप में लौटाया गया है।

आप वैकल्पिक रूप से NLS_TIMESTAMP_TZ_FORMAT का मान बदल सकते हैं सीधे पैरामीटर। यह अन्य मापदंडों को प्रभावित किए बिना उस पैरामीटर को बदल देगा। अधिक जानकारी और उदाहरणों के लिए अपने Oracle सत्र में दिनांक स्वरूप कैसे बदलें देखें।

डिफ़ॉल्ट प्रारूप

इस उदाहरण में मैं fmt . को छोड़ देता हूं तर्क:

DUAL से
SELECT 
    TO_TIMESTAMP_TZ(
        '25-AUG-30 06.10.35.123456789 PM +09:30'
    )
FROM DUAL;

परिणाम:

25-AUG-30 06.10.35.123456789 PM +09:30

ऐसा करते समय, तर्क TIMESTAMP WITH TIME ZONE के डिफ़ॉल्ट स्वरूप में होना चाहिए डेटा प्रकार, जो NLS_TIMESTAMP_TZ_FORMAT . द्वारा निर्धारित किया जाता है पैरामीटर।

यहां एक उदाहरण दिया गया है कि क्या होता है जब हम एक मान पास करते हैं जो इस प्रारूप के अनुरूप नहीं है:

DUAL से
SELECT 
    TO_TIMESTAMP_TZ(
        '25-Aug-2030 18:10:35.123456789 +09:30'
    )
FROM DUAL;

परिणाम:

Error report -
ORA-01849: hour must be between 1 and 12

इस मामले में, मैंने एक ऐसा मान पारित किया है जो 24 घंटे के समय का उपयोग करता है, लेकिन मेरा NLS_TIMESTAMP_TZ_FORMAT पैरामीटर AM/PM डिज़ाइनर के साथ 12 घंटे की घड़ी निर्दिष्ट करता है।

इसे ठीक करने के लिए, मुझे या तो अपना इनपुट बदलना होगा, या NLS_TIMESTAMP_TZ_FORMAT का मान बदलना होगा पैरामीटर।

रूपांतरण त्रुटि पर एक डिफ़ॉल्ट मान प्रदान करें

आपके पास उस स्थिति में लौटने के लिए एक मान प्रदान करने का विकल्प भी है, जब तर्क को TIMESTAMP WITH TIME ZONE में कनवर्ट करते समय कोई त्रुटि होती है। टाइप करें।

उदाहरण:

SET NULL 'null';
SELECT 
    TO_TIMESTAMP_TZ(
    'Oops!'
    DEFAULT null ON CONVERSION ERROR
    )
FROM DUAL;

परिणाम:

null

इस मामले में मैंने निर्दिष्ट किया है कि null जब भी कोई रूपांतरण त्रुटि होती है तो उसे वापस कर दिया जाना चाहिए। रिटर्न वैल्यू एक एक्सप्रेशन या बाइंड वेरिएबल हो सकता है, और इसे CHAR के कैरेक्टर स्ट्रिंग के लिए मूल्यांकन करना चाहिए , VARCHAR2 , NCHAR , या NVARCHAR2 डेटा प्रकार, या null . इसके बाद यह फ़ंक्शन इसे TIMESTAMP WITH TIME ZONE . में बदल देता है . यदि इस रूपांतरण के दौरान कोई त्रुटि होती है, तो एक त्रुटि वापस आ जाती है।

उपरोक्त उदाहरण में पहली पंक्ति के संबंध में, यह केवल यह निर्दिष्ट करने के लिए है कि मेरे क्लाइंट को क्या लौटाया जाना चाहिए जब भी कोई null मूल्य होता है। डिफ़ॉल्ट रूप से, SQLcl और SQL*Plus जब भी null . खाली स्थान लौटाते हैं SQL SELECT . के परिणामस्वरूप होता है बयान।

हालांकि, आप SET NULL . का उपयोग कर सकते हैं वापस करने के लिए एक अलग स्ट्रिंग निर्दिष्ट करने के लिए। यहाँ मैंने निर्दिष्ट किया है कि स्ट्रिंग null लौटाया जाना चाहिए।

'nlsparam' तर्क

वैकल्पिक 'nlsparam' तर्क उस भाषा को निर्दिष्ट करता है जिसमें महीने और दिन के नाम और संक्षिप्त रूप दिए गए हैं। यह निम्नलिखित रूप लेता है:

'NLS_DATE_LANGUAGE = language'

उदाहरण

SELECT 
    TO_TIMESTAMP_TZ(
        '25-agosto-2030 18:10:35.123456789 +02:00', 
        'DD-Month-RRRR HH24:MI:SS.FF TZH:TZM',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

परिणाम:

25-AUG-30 06.10.35.123456789 PM +02:00

ध्यान दें कि परिणाम अभी भी वर्तमान सत्र के NLS_TIMESTAMP_TZ_FORMAT के अनुसार लौटाया गया है पैरामीटर। बस इतना ही इनपुट एक अलग भाषा में था।

जब मैं agosto को बदलता हूं तो यह होता है से August . तक उसी 'nlsparam' . का उपयोग करते समय मूल्य:

SELECT 
    TO_TIMESTAMP_TZ(
        '25-August-2030 18:10:35.123456789 +02:00', 
        'DD-Month-RRRR HH24:MI:SS.FF TZH:TZM',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

परिणाम:

Error report -
ORA-01843: not a valid month

ऐसा इसलिए हुआ क्योंकि मैंने 'nlsparam' द्वारा निर्दिष्ट भाषा में तारीख प्रदान नहीं की थी तर्क (स्पेनिश)।

इसे English में बदलना इस समस्या को हल करता है:

SELECT 
    TO_TIMESTAMP_TZ(
        '25-August-2030 18:10:35.123456789 +02:00', 
        'DD-Month-RRRR HH24:MI:SS.FF TZH:TZM',
        'NLS_DATE_LANGUAGE = English'
    )
FROM DUAL;

परिणाम:

25-AUG-30 06.10.35.123456789 PM +02:00

अगर यह मदद करता है तो Oracle में समर्थित भाषाओं की सूची कैसे लौटाएं देखें।

अशक्त तर्क

पासिंग null परिणाम null :

SET NULL 'null';
SELECT 
    TO_TIMESTAMP_TZ(null)
FROM DUAL;

परिणाम:

null

अवैध तर्क गणना

कोई तर्क पारित किए बिना फ़ंक्शन को कॉल करने से त्रुटि होती है:

SELECT TO_TIMESTAMP_TZ()
FROM DUAL;

परिणाम:

Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

हालाँकि, बहुत अधिक तर्क पारित करने से कोई समस्या नहीं होती है, जब तक कि पहले तीन मान्य हैं:

SELECT 
    TO_TIMESTAMP_TZ(
        '25-Aug-2030 18:10:35.123456789 +09:30', 
        'DD-Mon-RRRR HH24:MI:SS.FF TZH:TZM',
        'NLS_DATE_LANGUAGE = English',
        'Oops!',
        'Dang!',
        'Homer',
        'Symptom'
    )
FROM DUAL;

परिणाम:

25-AUG-30 06.10.35.123456789 PM +09:30

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विंडोज 64 बिट के लिए Oracle 11g एक्सप्रेस संस्करण?

  2. NEXT_DAY () Oracle में फ़ंक्शन

  3. एक रिपोर्ट में बारकोड \ या कई बारकोड के साथ कई रिपोर्ट कैसे प्रिंट करें

  4. पीएल/एसक्यूएल डेवलपर के साथ रिमोट ओरेकल डीबी से कैसे जुड़ें?

  5. Oracle एकाधिक तालिकाओं से पंक्तियों को हटा रहा है