Following SQL command
select TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))) from table1
produces a result of the format: +000000000 00:03:01.954000.
Is it possible to enter a special format in the to_char function in order to get a result of format: +00 00:00:00.000?
to_char() seems to have fixed format :( so regexp_substr may be an option, e.g.:
Slight case of thread necromancy, however I came across this question while searching for how to format an interval, so I thought it was worth adding this comment.
From the Oracle documentation, adding a timestamp to an interval results in a timestamp, so by adding a constant timestamp with zero time elements you can then use the standard to_char format elements for datetime ...
However, there is an issue if you intervals could be greater than a day. There is no format element for days that will yield 0. "DDD" is day of the year, so would be 365 in the example above, or 1 or more if the interval was greater then a day. This is fine as long as your intervals are less than 24 hours though.
Should add this is on 11g so may well not have be applicable to the OP.
you could cast the result if you want less precision:
Edit following OP comment:
From The Oracle Documentation (11gr1):
It seems you will have to manually use EXTRACT to achieve the desired output:
This is not very elegant but it seems it is the only way to deal with microseconds precision.
Just add date and use to_char ('HH24:MI') !
I realize it's not clever at all, nor is it the special format string you're looking for, but this answer does work, given that the output is fixed length:
It also just truncs the fractional seconds instead of rounding, but I assume from your example they're all just zeros anyway.
This is an even greater embarrassment, but I couldn't resist:
You can strip out the last part (or any part) with regular expression Oracle REGEXP_REPLACE does just that.
select REGEXP_REPLACE( TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), '..*') from table1