我有一个像这样在我的查询中的列:在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