SELECT DECODE (d, 0, NULL, 1, '1 day ', TO_CHAR (d) || ' days ')
|| DECODE (h, 0, NULL, 1, '1 hour ', TO_CHAR (h) || ' hours ')
|| DECODE (m, 0, NULL, 1, '1 minute ', TO_CHAR (m) || ' minutes ')
|| DECODE (s, 0, NULL, 1, '1 second', TO_CHAR (s) || ' seconds')
FROM (SELECT EXTRACT (DAY FROM (dt)) d, EXTRACT (HOUR FROM (dt)) h, EXTRACT (MINUTE FROM (dt)) m, EXTRACT (SECOND FROM (dt)) s
FROM (SELECT NUMTODSINTERVAL (:HOUR_DEPARTURE - :DATE_LOADING, 'DAY') AS dt FROM DUAL))
为了好玩:
SELECT DECODE (y, 0, NULL, 1, '1 year ', TO_CHAR (y) || ' years ')
|| DECODE (m, 0, NULL, 1, '1 month ', TO_CHAR (m) || ' months ')
|| DECODE (d, 0, NULL, 1, '1 day ', TO_CHAR (d) || ' days ')
|| DECODE (h, 0, NULL, 1, '1 hour ', TO_CHAR (h) || ' hours ')
|| DECODE (mi, 0, NULL, 1, '1 minute ', TO_CHAR (mi) || ' minutes ')
|| DECODE (s, 0, NULL, 1, '1 second', TO_CHAR (s) || ' seconds')
FROM (SELECT EXTRACT (YEAR FROM (ym)) y,EXTRACT (MONTH FROM (ym)) m,
EXTRACT (DAY FROM (dt)) d, EXTRACT (HOUR FROM (dt)) h, EXTRACT (MINUTE FROM (dt)) mi, EXTRACT (SECOND FROM (dt)) s
FROM (SELECT NUMTOYMINTERVAL (MONTHS_BETWEEN (:HOUR_DEPARTURE, :DATE_LOADING), 'MONTH') AS ym ,
NUMTODSINTERVAL (ADD_MONTHS(:HOUR_DEPARTURE,-MONTHS_BETWEEN (:HOUR_DEPARTURE, :DATE_LOADING)) - :DATE_LOADING, 'DAY') AS dt
FROM DUAL
)
)