首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NVL类似函数设置默认值的oracle查询帮助

使用NVL类似函数设置默认值的oracle查询帮助
EN

Stack Overflow用户
提问于 2011-07-27 03:06:59
回答 3查看 2.8K关注 0票数 2

如果我没有返回任何行,并且想要硬编码计数和sysdate信息的默认值'0‘,我该如何重写这个oracle查询?

如果没有数据,我的查询现在会给出这样的结果:

代码语言:javascript
复制
 1* SELECT count(*) as MYCNT, timestamp FROM TESTDATA WHERE timestamp = to_char(sysdate-2, 'yyyymmdd') || '0000' group by timestamp
SQL> /

no rows selected

在这里,我尝试了NVL,但没有得到预期的输出:

代码语言:javascript
复制
1* select nvl(count(*), 0) as MYCNT, to_char(sysdate-2, 'yyyymmdd') || '0000' from TESTDATA WHERE timestamp = to_char(sysdate-2, 'yyyymmdd') || '0000' group by timestamp
SQL> /

no rows selected

想要看到类似这样的东西:

代码语言:javascript
复制
MYCNT    TIMESTMP
-----    --------
0        201107250000
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-27 03:13:46

group by正在阻止这一点仅仅通过默认来工作。

代码语言:javascript
复制
select count(*) ,  to_char(sysdate-2, 'yyyymmdd') || '0000' as timestamp 
from dual where 1=0

通过将输出与以下内容进行比较,您可以看到情况确实如此:

代码语言:javascript
复制
select count(*) ,  to_char(sysdate-2, 'yyyymmdd') || '0000' as timestamp 
from dual where 1=0
group by  to_char(sysdate-2, 'yyyymmdd') || '0000' 

第二个版本返回空白,第一个版本返回0,时间戳

票数 2
EN

Stack Overflow用户

发布于 2011-07-27 03:12:34

试一试

代码语言:javascript
复制
SELECT 0, to_char(sysdate-2, 'yyyymmdd') || '0000' FROM DUAL WHERE 0 = 
(SELECT count(*) FROM TESTDATA WHERE timestamp = to_char(sysdate-2, 'yyyymmdd') || '0000')
UNION
SELECT count(*) as MYCNT, timestamp FROM TESTDATA WHERE timestamp = to_char(sysdate-2, 'yyyymmdd') || '0000' group by timestamp

这将返回实际数据(如果存在),如果不是默认数据

票数 0
EN

Stack Overflow用户

发布于 2011-07-27 03:21:58

试试这个:

代码语言:javascript
复制
 SELECT count(*) as MYCNT, timestamp 
FROM TESTDATA 
WHERE timestamp = to_char(sysdate-2, 'yyyymmdd') || '0000' 
GROUP BY timestamp 
UNION
SELECT 0, '201107250000'
  FROM dual
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6835179

复制
相关文章

相似问题

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