मान लें कि कॉलम पहले से ही दिनांक हैं, और इसलिए आपके द्वारा किए जा रहे स्ट्रिंग्स से और उनके लिए रूपांतरण व्यर्थ है, और यह कि अंतर हमेशा एक दिन से कम होने वाला है, आप यह कर सकते हैं:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
यह तिथियों के बीच एक दिन के अंश के रूप में अंतर प्राप्त करता है; abs()
. के माध्यम से सुनिश्चित करता है कि यह सकारात्मक है; और फिर उस अंश को एक नाममात्र तिथि पर वापस जोड़ता है, जिसका समय मध्यरात्रि के रूप में होता है। फिर यह केवल समय को देखते हुए इसे एक स्ट्रिंग में बदल देता है।
त्वरित डेमो:
-- CTEs to supply the two date/times
with stp (created_date) as (
select cast(timestamp '2018-02-26 12:59:21' as date) from dual
),
adhh (created_date) as (
select cast(timestamp '2018-02-26 12:59:32' as date) from dual
)
select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
from stp cross join adhh;
TO_CHAR(
--------
00:00:11
यदि अंतर एक दिन से अधिक हो सकता है, लेकिन एक वर्ष से अधिक नहीं, तो आप प्रारूप मॉडल को कुछ इस तरह बदल सकते हैं जैसे 'FMDDD FMHH24:MI:SS'
, जो प्रारंभ में पूरे दिन दिखाएगा।