首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle SQL中,如何仅在列不是null时才向其添加文本?

在Oracle SQL中,如何仅在列不是null时才向其添加文本?
EN

Stack Overflow用户
提问于 2015-05-29 09:06:12
回答 4查看 1.5K关注 0票数 3

在我的查询中有这样一个列:

代码语言:javascript
复制
ROUND(( xyz.DATE - abc.DATE), 5)|| ' days' AS "Average SOD Approval duration"

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

EN

回答 4

Stack Overflow用户

发布于 2015-05-29 09:22:16

以下是较短的方法:

代码语言:javascript
复制
select ltrim(round(d1-d2, 5)|| ' days', ' days') dt from test

SQLFiddle

编辑:如果至少有一个日期为空,则日期差异也为空。在连接“days”之后,您只会得到这个字符串作为值,因此从左侧的修整短语“days”将为null。如果日期不是空的,则从左侧剪裁不会产生任何影响。函数伊里姆()的文档。在这种情况下,通过微调,您可以缩短语法,避免重复计算。

票数 4
EN

Stack Overflow用户

发布于 2015-05-29 09:21:15

我建议NVL2而不是case

代码语言:javascript
复制
SELECT nvl2(ROUND((xyz.DATE - abc.DATE), 5),
            ROUND((xyz.DATE - abc.DATE), 5) || 'days',
            NULL) AS "Average SOD Approval duration"
FROM dual;
票数 3
EN

Stack Overflow用户

发布于 2015-05-29 09:11:19

使用CASE语句

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30525527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档