在我的查询中有这样一个列:
ROUND(( xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"问题是,当我的数据为空时,我会在每个空框中打印“天”。如果输出为null,我希望输出中没有任何内容。只有在有数据的时候才附加“天”。
发布于 2015-05-29 09:22:16
以下是较短的方法:
select ltrim(round(d1-d2, 5)|| ' days', ' days') dt from testSQLFiddle
编辑:如果至少有一个日期为空,则日期差异也为空。在连接“days”之后,您只会得到这个字符串作为值,因此从左侧的修整短语“days”将为null。如果日期不是空的,则从左侧剪裁不会产生任何影响。函数伊里姆()的文档。在这种情况下,通过微调,您可以缩短语法,避免重复计算。
发布于 2015-05-29 09:21:15
我建议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;发布于 2015-05-29 09:11:19
使用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 yourtablenamehttps://stackoverflow.com/questions/30525527
复制相似问题