आप 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.