剛剛進入甲骨文。如何在Oracle中找到以下之間的時差。
to_char(CAST(b.start_time AS DATE),'dd-MON-yy hh24:mi:ss') as start_time
to_char(CAST(b.end_time AS DATE),'dd-MON-yy hh24:mi:ss') as end_time
我需要獲取結束時間和開始時間的小時和分鐘時差,即(end_time - start_time)。
感謝你的幫助。
uj5u.com熱心網友回復:
使用以下方法查找差異的日、小時和分鐘分量,EXTRACT然后將它們連接成一個字串:
SELECT (EXTRACT(DAY FROM end_time - start_time)*24
EXTRACT(HOUR FROM end_time - start_time))
|| ':'
|| TO_CHAR(EXTRACT(MINUTE FROM end_time - start_time), 'FM00')
AS difference
FROM table_name
注意:如果您只決議小時和分鐘,那么您將不知道差異是否大于 24 小時。
其中,對于樣本資料:
CREATE TABLE table_name (start_time TIMESTAMP(6), end_time TIMESTAMP(6) );
INSERT INTO table_name (start_time, end_time)
SELECT TRUNC(SYSTIMESTAMP), SYSTIMESTAMP FROM DUAL UNION ALL
SELECT TIMESTAMP '2022-01-01 00:00:00', TIMESTAMP '2022-01-03 00:00:00' FROM DUAL;
輸出:
不同之處 14:15 48:00
db<>在這里擺弄
uj5u.com熱心網友回復:
簡單地做
b.end_time - b.start_time
結果是一個INTERVAL DAY TO SECOND值,請參見INTERVAL
為了獲得小時和分鐘,您可以使用SUBSTR/ REGEX_SUBSTR/REGEXP_REPLACE或EXTRACT
REGEXP_REPLACE((b.end_time - b.start_time), '.*(\d{2}:\d{2}):\d{2}.*', '\1')
EXTRACT(HOUR FROM (b.end_time - b.start_time))||':'||EXTRACT(minute FROM (b.end_time - b.start_time))
uj5u.com熱心網友回復:
您可以在 Oracle 中減去時間。確保您的資料型別是日期時間格式,并將其乘以 24 得到小時,24*60 得到分鐘。
(b.end_time - b.start_time) * 24 --For Hours
(b.end_time - b.start_time) * 24*60 --For Minutes
uj5u.com熱心網友回復:
我花了 1970 年,然后將其添加到所需格式之間的差異 - start_date_time>end_date_timehh24:mi:ss
你可以試試這個查詢:
SELECT
TO_CHAR(TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') (TO_DATE('2022-01-18 21:00', 'YYYY-MM-DD hh24:mi') - TO_DATE
('2022-01-18 19:10', 'YYYY-MM-DD hh24:mi')), 'hh24:mi:ss') AS human_readable_format
FROM
DUAL;

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417579.html
標籤:
