我有一個像這樣在我的查詢中的列:在Oracle SQL中,僅當文本不爲空時,我如何才能將文本添加到列中?
ROUND((xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"
的問題是,當我的數據是空的,我得到「天」印在每一個空箱子。如果輸出爲空,我希望輸出中沒有任何內容。並在爲數據時只附加「天」。
我有一個像這樣在我的查詢中的列:在Oracle SQL中,僅當文本不爲空時,我如何才能將文本添加到列中?
ROUND((xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"
的問題是,當我的數據是空的,我得到「天」印在每一個空箱子。如果輸出爲空,我希望輸出中沒有任何內容。並在爲數據時只附加「天」。
使用case語句:
CASE WHEN ROUND((xyz.date - abc.date), 5) IS NOT NULL
THEN ROUND((xyz.date - abc.date), 5)||' days'
END
你可以在「ELSE NULL」子句添加,使其倍加清楚,如果條件沒有滿足,然後在空將返回,如果你想使案例陳述尤其明確,但由於這是默認情況,所以沒有必要。
我建議,而不是NVL2
case
SELECT nvl2(ROUND((xyz.DATE - abc.DATE), 5),
ROUND((xyz.DATE - abc.DATE), 5) || 'days',
NULL) AS "Average SOD Approval duration"
FROM dual;
非常感謝!這很棒! – Coffee
這裏是簡短的形式:
select ltrim(round(d1-d2, 5)|| ' days', ' days') dt from test
編輯:如果至少有一個日期爲空,則日期差異也爲空。在「days」連接之後,您只能將此字符串作爲值,因此從左側修剪短語「days」會給出null。如果日期不爲零,則從左側裁剪不會產生任何影響。功能ltrim()的文檔。在這種情況下,您可以縮短語法並避免重複計算。
非常感謝!這很棒! – Coffee