2012-04-02 40 views
1

现在我有一个查询,给了我一个空白,这是好的,但我真正需要的是返回“空”,如果它为空的东西。我已经玩了几个选项,现在这是我最好的查询,但我不知道如何让它显示“空”如果为空。查询返回文本,如果行从oracle空db

SELECT paramOne, paramTwo 
FROM tableName 
WHERE search_param = 'x' 

UNION ALL 

SELECT NULL, NULL 
FROM dual 
WHERE NOT EXISTS (
SELECT paramOne, paramTwo 
FROM tableName 
WHERE search_param = 'x' 
); 

paramOne是数 paramTwo为varchar

我正在寻找的结果基本上是这样的:如果该行

如果行有数据它应该返回123,名称

没有数据它应该000,'空'

+0

什么空白,你说什么?您能否提供当前表格的样本数据和您的预期结果? – 2012-04-02 17:10:34

回答

4

我怀疑paramTwo(该VARCHAR2一个)是不是真的空,尝试:

SELECT nvl(paramOne, 0), nvl(trim(paramTwo), 'EMPTY') 
FROM tableName 
WHERE search_param = 'x' 
2

这听起来有点像你应该考虑做客户端的东西,而不是o F IN查询...但你可以只硬编码的'EMPTY'代替NULL

SELECT paramOne, paramTwo 
FROM tableName 
WHERE search_param = 'x' 

UNION ALL 

SELECT 'EMPTY', 'EMPTY' 
FROM dual 
WHERE NOT EXISTS (
SELECT paramOne, paramTwo 
FROM tableName 
WHERE search_param = 'x' 
); 
+0

我想过这个,试过了,但如果结果为空,它会返回一个空行。 – mtnwk 2012-04-02 17:54:58

+0

@mtnwk空白行,你的意思是根本没有行,或者是含有空白的行? – 2012-04-02 18:01:09

+0

没有行返回 – mtnwk 2012-04-02 18:23:19

1

如果你想打开一个NULL值到非NULL值,使用NVL功能

SELECT NVL(paramOne, 'Empty'), 
     NVL(paramTwo, 'Empty') 
    FROM table_name 
WHERE search_param = 'x'; 

如果您正在尝试做其他事情,如果您可以发布一些示例数据和预期的输出,这将非常有帮助。

+1

如果第一个查询不包含任何结果,他想返回''Empty'...这不会工作,因为不会返回NULL值针对执行'NVL'。 – 2012-04-02 17:43:03

+1

我肯定玩过NVL,我注意到的一件事是,我还是得到了一个空行而不是'Empty'。我应该注意到,paramOne是一个数字,paramTwo是varchar。 – mtnwk 2012-04-02 17:52:38

+0

@mtnwk - 您是否试图将返回0行数据的查询转换为返回1行硬编码值的查询的查询?或者你是否试图转换一个查询,该查询返回具有'NULL'值的1行数据到一个查询中,该查询返回具有硬编码值的1行数据?我读了你的第一篇文章,询问前者。你的编辑听起来像你可能打算问后者。 – 2012-04-02 17:57:30