2015-05-29 19 views
1

我有我的SQL查詢中的列返回的持續時間:在SQL中,根據時間的不同,如何顯示帶有「小時」或「天」的列?

ROUND((xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration" 

我希望做的是顯示時,當日期差小於6小時,以顯示天除此以外。

所以如果日期差異只有0.09天,應該說「2小時」而不是0.09天。

有沒有辦法做到這一點?

我想用一個CASE,但不知道如何將其追加:

CASE expression 

    WHEN ROUND((xyz.DATE - abc.DATE), 5) < 0.25 THEN ?? 
    ... 
    WHEN value_n THEN result_n 

    ELSE result 

END 

回答

2

很簡單拼接。

case when ((xyz.DATE - abc.DATE), 5) < 0.25 
then to_char(((xyz.DATE - abc.DATE), 5)) || ' hours' 
etc 
2

我想你想是這樣的:

(CASE WHEN ROUND((xyz.DATE - abc.DATE), 5) < 1 
     THEN ROUND(24*(xyz.DATE - abc.DATE), 5) || ' hours' 
     ELSE ROUND((xyz.DATE - abc.DATE), 5) || ' days' 
END) AS "Average SOD Approval 
+0

非常感謝! !!!! – Coffee

1
SELECT (CASE WHEN ROUND((xyz.DATE - abc.DATE), 5) IS NULL 
      THEN NULL 
      WHEN ROUND((xyz.DATE - abc.DATE), 5) < 1 
      THEN ROUND((xyz.DATE - abc.DATE) * 24, 5) || ' hours' 
      ELSE ROUND((xyz.DATE - abc.DATE), 5) || ' days' 
      END) AS "Average SOD Approval duration 
FROM yourtablename 
0
select (CASE 
     WHEN (sysdate - trunc(sysdate)) * 86400 between 0 and 21600 /* if less than 6 hours */ 
      THEN 
      ROUND(24 * (sysdate - trunc(sysdate))) || ' hours ' 
     WHEN (sysdate - trunc(sysdate)) * 86400 between 21601 and 43200 /* handle gab from 6hours to 12 hours as one day*/ 
      THEN '1 day ' 
     ELSE ROUND((sysdate - trunc(sysdate))) || ' days' /*handle more than 12 hours or nevative numbers*/ 
     END) 
    from dual; 

enter code here 

代碼說明:0和6小時之間

  • 的時間然後再返回圓角小時例如4H :30m = 5h:00m
  • 爲期不到半天,然後考慮它,並返回爲1天。
  • 爲負值期間或超過半天返回之間的兩個 日期之間。 (例如1天半返回爲2天)
  • 與xyz.DATE和TRUNC(SYSDATE)與abc.DATE
代替SYSDATE
相關問題