2014-07-02 70 views
0

我的要求是使用SQL將15分鐘時間間隔轉換爲HH:MI am/pm格式。舉個例子:使用SQL將時間間隔轉換爲HH:MI am/pm格式

IF interval = 0 => time = 12:00 am 
IF interval = 15 => time = 12:15 am 
IF interval = 30 => time = 12:30 am 
IF interval = 45 => time = 12:45 am 
IF interval = 60 => time = 01:00 am 

等,

到目前爲止,我只設法轉化爲HH每小時間隔:MI A/P格式,即12:00A,01:00A等等,下面是我對我的自定義表使用的查詢示例。 START_TIME是包含15分鐘間隔條目的列。

select START_TIME/15, 
     case when (mod(START_TIME/15,4) = 0) then 
      case when (mod(START_TIME/15, 48) = 0) then (decode(START_TIME/15,0,'12:00 am',48,'12:00 pm')) 
           else (
        case when (START_TIME/15 < 48) then (START_TIME/ 60 || 'am') 
         else (START_TIME/60 - 12 || 'pm') 
        end 
       ) 
      end 
       else ' ' 
end from MY_TABLE; 

有人能幫我把它工作15分鐘的時間間隔嗎?謝謝。

回答

1

試着讓oracle爲你做點時間吧。

默認情況下,添加一個日期會添加一天。您想在start_time列中添加時間。

我們將從沒有使用TRUNC的時間組件的日期開始。

SELECT TRUNC(SYSDATE) FROM DUAL; 

然後爲此日期添加1 /(60 * 24)* START_TIME分鐘並僅打印日期的時間部分。

select TO_CHAR (TRUNC(SYSDATE) + (1/(60*24) * START_TIME), 'HH:MI AM') 
from MY_TABLE 
+0

三江源!這完全適合我的要求!我只需對您的查詢進行一次小改動即可使用HH:MI AM而不是HH24:MI AM。我們不希望24小時格式和AM/PM混在一起。 :) – unos

0

也許我不明白你的問題。 Oracle間隔類型已經這樣做了。

Oracle中的時間間隔的目的是存儲時間偏移量並允許您執行您似乎要求的操作。可以將間隔添加到基準日期/時間戳以生成新的日期/時間戳,並使用TO_CHAR和TO_DATE使用日期/時間格式化函數以任何格式進行格式化。

create table intervals(base_time timestamp, offset_interval interval); 

SQL> desc intervals 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 

BASE_TIME           TIMESTAMP(6) 
OFFSET_INTERVAL         INTERVAL DAY(2) TO SECOND(6) 


SQL> insert into intervals values(sysdate, interval '15' minute); 

1 row created. 

SQL> insert into intervals values(sysdate, interval '30' minute); 

1 row created. 

SQL> insert into intervals values(sysdate, interval '45' minute); 

1 row created. 

SQL> insert into intervals values(sysdate, interval '60' minute); 

1 row created. 

SQL> insert into intervals values(sysdate, interval '90' minute); 

1 row created. 

SQL> insert into intervals values(sysdate, interval '120' minute); 

1 row created. 

然後添加鹼時間戳的間隔,和格式TO_CHAR()

SQL> select to_char(base_time + offset_interval, 'HH:MI AM') from intervals; 

TO_CHAR(
-------- 
03:45 PM 
04:00 PM 
04:15 PM 
04:30 PM 
05:00 PM 
05:30 PM 

6 rows selected.