在Oracle SQL中,如何仅在列不为空时才将列添加到列中?

时间:2015-05-29 09:06:12

标签: sql oracle oracle-sqldeveloper

我的查询中有一列如下:

ROUND(( xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"

问题在于,当我的数据为空时,我会在每个空框中打印“天”。我希望输出中没有任何内容,如果它为空。并且只在数据时附加“天”。

4 个答案:

答案 0 :(得分:4)

这是更短的方式:

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

SQLFiddle

编辑:如果至少有一个日期为空,则日期差异也为空。连接“天”之后,您只获得此字符串作为值,因此从左侧修剪短语“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,但由于这是默认的,所以没有必要。