Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 减少Oracle中AND运算符的使用,同时比较不同列中的多个空值_Sql_Oracle - Fatal编程技术网

Sql 减少Oracle中AND运算符的使用,同时比较不同列中的多个空值

Sql 减少Oracle中AND运算符的使用,同时比较不同列中的多个空值,sql,oracle,Sql,Oracle,我想比较多个列的空值。假设我的表中有3列,我必须从中找出非空值。我正在使用以下代码: select * from table1 where column1 is not null and column2 is not null and column3 is not null 我不想使用这段代码,因为如果列继续增加,它会多次使用“和”。 在Oracle 11g中,任何人都可以选择此选项?您可以使用 COALESCE (expr1, expr2) 这相当于 CASE WHEN expr1 I

我想比较多个列的空值。假设我的表中有3列,我必须从中找出非空值。我正在使用以下代码:

select * from table1 where 
column1 is not null 
and column2 is not null
and column3 is not null
我不想使用这段代码,因为如果列继续增加,它会多次使用“和”。 在Oracle 11g中,任何人都可以选择此选项?

您可以使用

COALESCE (expr1, expr2)
这相当于

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
你的语法应该是

coalesce(column1,....,columnn) is not null

我同意你的意见,你的问题是好的。如果要检查的列都是数字类型,则可以使用Oracle的空值行为来缩短查询,如下所示:

select * from table 1
where 
  (
    column1 
    + column2
    + column3
  ) is not null;

如果列出的任何列为空,则总和也将为空。不幸的是,如果改为使用字符串--空字符串可以很好地连接,因此相同的方法不适用于它们

您可以使用它来代替合并:

SELECT *
FROM   table1
WHERE  column1 || column2 || column3 || column4 IS NOT NULL;

蒂姆·莱恩回答得很好。如果您拥有所有字符串列,那么where子句可以是:

    WHERE LENGTH(COLUMN1)+LENGTH(COLUMN2)+LENGTH(COLUMN3) IS NOT NULL
如果混合使用字符串和数字:

    WHERE COLUMN_INTEGER1+COLUMN_INTEGER2+LENGTH(COLUMN_STRING3) IS NOT NULL

之前有人问过:@Franek:谢谢!但我没有找到处理这种情况的正确方法。你能提供代码片段吗?你的代码绝对没有问题,根据任何合理的标准,没有更好的替代公式。适用于或值:
从表1中选择*,其中第1列不为空,第2列不为空,或第3列不为空
但不适用于,此建议的问题是
合并(expr1,expr2)
将不允许您筛选出
expr2
为空而
expr1
为非空的情况。如果至少有一列不为空,则为真。问题是确保所有列都不是空的。