Sql 减少Oracle中AND运算符的使用,同时比较不同列中的多个空值
我想比较多个列的空值。假设我的表中有3列,我必须从中找出非空值。我正在使用以下代码: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
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
为非空的情况。如果至少有一列不为空,则为真。问题是确保所有列都不是空的。