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

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

Oracle डाटाबेस में, TO_DSINTERVAL() फ़ंक्शन अपने तर्क को INTERVAL DAY TO SECOND . के मान में बदल देता है डेटा प्रकार।

सिंटैक्स

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

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

तो आपके पास तर्क को SQL स्वरूप या ISO प्रारूप में पारित करने का विकल्प है।

यहां अंतर है:

  • sql_format SQL अंतराल प्रारूप SQL मानक (ISO/IEC 9075) के साथ संगत है।
  • ds_iso_format आईएसओ अवधि प्रारूप आईएसओ 8601:2004 मानक के साथ संगत है।

sql_format . के लिए सिंटैक्स इस तरह जाता है:

[+ | -] days hours : minutes : seconds [. frac_secs ]

कहां:

  • days 0 और 999999999 के बीच एक पूर्णांक है
  • hours 0 और 23 के बीच एक पूर्णांक है
  • minutes और seconds 0 और 59 के बीच पूर्णांक हैं
  • frac_secs .0 और .999999999 के बीच सेकंड का भिन्नात्मक भाग है।
  • एक या अधिक रिक्त स्थान दिनों को घंटों से अलग करते हैं। प्रारूप तत्वों के बीच अतिरिक्त रिक्त स्थान की अनुमति है।

और ds_iso_format . के लिए सिंटैक्स :

[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

कहां:

  • days , hours , minutes और seconds 0 और 999999999 के बीच पूर्णांक हैं।
  • frac_secs .0 और .999999999 के बीच सेकंड का भिन्नात्मक भाग है।
  • मान में किसी रिक्त स्थान की अनुमति नहीं है।
  • यदि आप T specify निर्दिष्ट करते हैं , तो आपको hours . में से कम से कम एक निर्दिष्ट करना होगा , minutes , या seconds मान।

उदाहरण

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

एसक्यूएल प्रारूप

यहाँ, मैं तर्क को SQL स्वरूप में पास करता हूँ:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

परिणाम:

+135 08:35:47.123456789

यदि आवश्यक हो तो हम इसे इसके चिन्ह के साथ जोड़ सकते हैं। आइए इसे नकारात्मक पर पलटें:

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

परिणाम:

-135 08:35:47.123456789

आईएसओ प्रारूप

इस उदाहरण में मैं वही मान पास करता हूं, लेकिन ISO प्रारूप में:

DUAL से
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

परिणाम:

+135 08:35:47.123456789

यहाँ यह एक ऋणात्मक मान के साथ है:

DUAL से
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

परिणाम:

-135 08:35:47.123456789

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

आपके पास उस स्थिति में लौटने के लिए एक मान प्रदान करने का विकल्प भी है जब तर्क को INTERVAL DAY TO SECOND में परिवर्तित करते समय कोई त्रुटि होती है। टाइप करें।

उदाहरण:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

परिणाम:

+00 00:00:00.000000

अशक्त तर्क

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

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

परिणाम:

null

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

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

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

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

SELECT TO_DSINTERVAL()
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

और बहुत अधिक तर्कों को पारित करने से त्रुटि उत्पन्न होती है:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL
Error report -
ORA-12702: invalid NLS parameter string used in SQL function

  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 क्लाउड ब्रेकडाउन - OCI पर डेटाबेस होस्टिंग की लागत

  2. ओरेकल DATE और TIMESTAMP के बीच अंतर

  3. Oracle 24 घंटे से अधिक प्रदर्शित करता है

  4. ORA-12705:NLS डेटा फ़ाइलों या अमान्य वातावरण तक नहीं पहुँच सकता

  5. ओरेकल में रेगेक्स द्वारा अल्पविराम से अलग सूची से डुप्लीकेट कैसे हटाएं लेकिन मुझे डुप्लीकेट मान नहीं चाहिए?