2015-05-29 54 views

回答

1

使用case語句:

CASE WHEN ROUND((xyz.date - abc.date), 5) IS NOT NULL 
      THEN ROUND((xyz.date - abc.date), 5)||' days' 
END 

你可以在「ELSE NULL」子句添加,使其倍加清楚,如果條件沒有滿足,然後在空將返回,如果你想使案例陳述尤其明確,但由於這是默認情況,所以沒有必要。

+0

非常感謝!這很棒! – Coffee

2

使用CASE聲明

SELECT CASE WHEN ROUND((xyz.DATE - abc.DATE), 5) IS NULL 
      THEN NULL 
      ELSE ROUND((xyz.DATE - abc.DATE), 5)|| ' days' 
      END AS "Average SOD Approval duration" 
FROM yourtablename 
+0

非常感謝!這很清楚! – Coffee

+0

@咖啡很高興它爲你工作 – Matt

3

我建議,而不是NVL2case

SELECT nvl2(ROUND((xyz.DATE - abc.DATE), 5), 
      ROUND((xyz.DATE - abc.DATE), 5) || 'days', 
      NULL) AS "Average SOD Approval duration" 
FROM dual; 
+0

非常感謝!這很棒! – Coffee

4

這裏是簡短的形式:

select ltrim(round(d1-d2, 5)|| ' days', ' days') dt from test 

SQLFiddle


編輯:如果至少有一個日期爲空,則日期差異也爲空。在「days」連接之後,您只能將此字符串作爲值,因此從左側修剪短語「days」會給出null。如果日期不爲零,則從左側裁剪不會產生任何影響。功能ltrim()的文檔。在這種情況下,您可以縮短語法並避免重複計算。

+0

啊,這看起來很整潔,謝謝! – Coffee

+0

Yeh這個我想說的是最好的答案 – Matt

+0

我唯一關心的是這個答案是否容易理解它在做什麼。有時候,如果它有助於未來的維護,最好採用更詳細的答案。 – Boneist

相關問題