我們有像810 1015這樣的數字對,表示小時和分鐘。我們必須計算這一對的微小差異。上面的例子會給125(分鐘)。Number to HH24:MM conversion - SQL,Oracle
您會給出什麼解決方案?我想轉換爲字符串和子串然後連接,但不知道它是3或4長,並使用IF ELSE,但會太複雜(如果沒有其他解決方案存在,我留下了這一點)。也想過以某種方式轉換爲基準60並減去,但也太複雜了。
在此先感謝。
我們有像810 1015這樣的數字對,表示小時和分鐘。我們必須計算這一對的微小差異。上面的例子會給125(分鐘)。Number to HH24:MM conversion - SQL,Oracle
您會給出什麼解決方案?我想轉換爲字符串和子串然後連接,但不知道它是3或4長,並使用IF ELSE,但會太複雜(如果沒有其他解決方案存在,我留下了這一點)。也想過以某種方式轉換爲基準60並減去,但也太複雜了。
在此先感謝。
編輯:此解決方案是基於Plirkee對LPAD評論數字來獲得4個字符的字符串,並且Stefano Zanini的解決方案被修改爲允許0小時和24小時格式。
如果最後兩個數字始終代表分鐘,如果時間總是在24小時格式:
with t(time1, time2) as (
select 810, 1015 from dual union all
select 20, 1530 from dual
),
conv(time1, time2) as (
select lpad(to_char(time1), 4, '0'),
lpad(to_char(time2), 4, '0')
from t
)
select time1,
time2,
24 * 60 * (to_date(time2, 'HH24MI') - to_date(time1, 'HH24MI')) diff_minutes
from conv;
謝謝! lpad是失蹤的一塊。 –
假設3個位數是你的號碼(否則你就會有不確定的情況下),這下面的查詢應該做的伎倆
select (to_date(substr(t2, 1, length(t2)-2) || ':' || substr(t2, length(t2)-1, length(t2)), 'HH:MI') -
to_date(substr(t1, 1, length(t1)-2) || ':' || substr(t1, length(t1)-1, length(t1)), 'HH:MI')) * 24 * 60 cc
from (select 810 t1, 1015 t2 from dual)
的最小長度的步驟如下:
只是一個另外的調整可以使用。希望這可以幫助。
SELECT
TO_CHAR(TO_DATE(LPAD(LPAD('1015',4,'0') - LPAD('810',4,'0'),4,'0'),'HH24MI'),'HH24')*60
+TO_CHAR(TO_DATE(lpad(lpad('1015',4,'0') - lpad('810',4,'0'),4,'0'),'HH24MI'),'MI') MINUTES
FROM dual;
如何使用標準日期部分(如01-10-2000)將數據存儲爲DATA日期類型。所以,你的數據會
01-01-2000 8:10:00
01-01-2000 10:15:00
etc
然後,你可以做簡單的數學日期:)
嗨!我們準備好了數據庫,充滿了記錄,所以任務就是改變它,並且必須將它轉換爲日期(你想象的方式)。 –
是3位數的最小長度或者你可以有85 8:05 AM?因爲在後一種情況下,你會遇到一個問題,因爲125可以代表1:25和12:05 –
難道你不能只用'lpad'加零來使其長度爲4?然後做任何你打算用它做的事情。 – Plirkee
問題不是3位數字是最小長度,但如果最後兩位數字總是代表分鐘。所以,比如說,105 - 是10:05還是1:05? [編輯]你如何表示00:20? –