我的查询中有一列如下:
ROUND(( xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"
问题在于,当我的数据为空时,我会在每个空框中打印“天”。我希望输出中没有任何内容,如果它为空。并且只在是数据时附加“天”。
答案 0 :(得分:4)
这是更短的方式:
select ltrim(round(d1-d2, 5)|| ' days', ' days') dt from test
编辑:如果至少有一个日期为空,则日期差异也为空。连接“天”之后,您只获得此字符串作为值,因此从左侧修剪短语“days”将为null。如果日期不是null,则从左边修剪没有影响。函数ltrim()的文档。在这种情况下,修剪可以缩短语法并避免重复计算。
答案 1 :(得分:3)
我建议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;
答案 2 :(得分: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
答案 3 :(得分:1)
使用案例陈述:
CASE WHEN ROUND((xyz.date - abc.date), 5) IS NOT NULL
THEN ROUND((xyz.date - abc.date), 5)||' days'
END
您可以添加" ELSE NULL"条款要明确的是,如果条件不满足,那么如果你想使案例陈述特别明确,那么将返回null,但由于这是默认的,所以没有必要。