2015-05-29 19 views

回答

1

使用case语句:

CASE WHEN ROUND((xyz.date - abc.date), 5) IS NOT NULL 
      THEN ROUND((xyz.date - abc.date), 5)||' days' 
END 

你可以在“ELSE NULL”子句添加,使其倍加清楚,如果条件没有满足,然后在空将返回,如果你想使案例陈述尤其明确,但由于这是默认情况,所以没有必要。

+0

非常感谢!这很棒! – Coffee

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 
+0

非常感谢!这很清楚! – Coffee

+0

@咖啡很高兴它为你工作 – Matt

3

我建议,而不是NVL2case

SELECT nvl2(ROUND((xyz.DATE - abc.DATE), 5), 
      ROUND((xyz.DATE - abc.DATE), 5) || 'days', 
      NULL) AS "Average SOD Approval duration" 
FROM dual; 
+0

非常感谢!这很棒! – Coffee

4

这里是简短的形式:

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

SQLFiddle


编辑:如果至少有一个日期为空,则日期差异也为空。在“days”连接之后,您只能将此字符串作为值,因此从左侧修剪短语“days”会给出null。如果日期不为零,则从左侧裁剪不会产生任何影响。功能ltrim()的文档。在这种情况下,您可以缩短语法并避免重复计算。

+0

啊,这看起来很整洁,谢谢! – Coffee

+0

Yeh这个我想说的是最好的答案 – Matt

+0

我唯一关心的是这个答案是否容易理解它在做什么。有时候,如果它有助于未来的维护,最好采用更详细的答案。 – Boneist

相关问题