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

आप 'HH24:MI:SSxFF6' के प्रारूप में एक varchar2 फ़ील्ड को इंटरवल आवर टू सेकेंड (6) के रूप में कैसे चुनते हैं?

आप TO_DSINTERVAL का उपयोग कर सकते हैं समारोह ; अपनी तालिका को दोहराने के लिए CTE का उपयोग करके यहां उदाहरण दें:

WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT TO_DSINTERVAL('0 ' || time_field)
FROM some_table;

TO_DSINTERVAL('0'||TIME_FIELD)
---------------------------------------------------------------------------
+000000000 00:00:00.000000000

ध्यान दें कि फ़ॉर्मैट को फ़ंक्शन द्वारा पहचाना जाने वाला प्रारूप बनाने के लिए, आपको एक 'दिन' भाग देना होगा, इसलिए डमी '0 ' को प्रीपेन्ड करना होगा। स्ट्रिंग।

आपकी निश्चित-मान क्वेरी थोड़ा अलग प्रारूप लौटाती है (या कम से कम थोड़ा अलग तरीके से प्रदर्शित होती है; अंतराल दा प्रकारों में प्रारूप मॉडल नहीं होते हैं तारीखों के समान ही, इसलिए सुनिश्चित नहीं है कि इसे सही तरीके से कैसे व्यक्त किया जाए):

SELECT INTERVAL '00:00:00.000000' HOUR TO SECOND(6)
FROM DUAL;

INTERVAL'00:00:00.000000'HOURTOSECOND(6)
---------------------------------------------------------------------------
+00 00:00:00.000000

इसे दोहराने के लिए आप cast . कर सकते हैं यह अगर आपको चाहिए:

WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT CAST(TO_DSINTERVAL('0 ' || time_field) AS INTERVAL DAY TO SECOND(6))
FROM some_table;

CAST(TO_DSINTERVAL('0'||TIME_FIELD)ASINTERVALDAYTOSECOND(6))
---------------------------------------------------------------------------
+00 00:00:00.000000

... या बस:

WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT CAST('0 ' || time_field AS INTERVAL DAY TO SECOND(6))
FROM some_table;

CAST('0'||TIME_FIELDASINTERVALDAYTOSECOND(6))
---------------------------------------------------------------------------
+00 00:00:00.000000

... जो पहले @catcall ने सुझाया था, वह बहुत अधिक है, लेकिन इसके लिए '0 ' . की भी आवश्यकता है प्रीपेड, या आपको एक ORA-01867 मिलता है . (या, यदि आप HOUR TO SECOND . का उपयोग करने का प्रयास करते हैं , ORA-00963 , प्रीपेड दिन के मूल्य के साथ भी)। हालांकि, मुझे लगता है (और यह सिर्फ एक अनुमान है, हालांकि बहुत कम शिक्षित) कि यह एक निहित TO_DSINTERVAL कर रहा है या इसी तरह, और मुझे लगता है कि मैं एक स्पष्ट एक का उपयोग करना पसंद करूंगा ताकि मुझे यकीन हो कि क्या हो रहा है। हालांकि यह सिर्फ मैं ही हो सकता हूं...

आपके नमूना डेटा का उपयोग करके मुझे भी एक ORA-01867 मिलता है , लेकिन यह शून्य मान के कारण होता है। आप case का उपयोग कर सकते हैं परिणाम में इसे शून्य के रूप में छोड़ने के लिए:

SELECT CASE WHEN time_field IS NULL THEN null
    ELSE CAST('0 ' || time_field AS INTERVAL DAY TO SECOND(6)) END
FROM some_table;

CASEWHENTIME_FIELDISNULLTHENNULLELSECAST('0'||TIME_FIELDASINTERVALDAYTOSECO
---------------------------------------------------------------------------
+00 10:00:00.000000
+00 12:00:00.000000
+00 15:00:00.000000
+00 17:00:00.000000
+00 20:00:00.000000


6 rows selected.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आप ओरेकल पीएल/एसक्यूएल में एक साधारण एक्सएमएल स्निपेट को कैसे पार्स करते हैं और इसे वैश्विक अस्थायी तालिका में लोड करते हैं?

  2. मौजूदा टेबल Oracle पर इंडेक्स बनाएं

  3. हाइबरनेट 4.3.5 v$session.program कॉन्फ़िगरेशन गुण को अनदेखा करता है

  4. Oracle XE क्वेरी लॉग

  5. * प्लस अन्य कॉलम का चयन कैसे करें