Oracle SQL语法 - 检查多个列是否为IS NOT NULL

jbr*_*eed 10 sql oracle syntax

是否有更简洁的语法来检查多列是否为空?我正在寻求简化

weight IS NOT NULL AND
weight_unit IS NOT NULL AND
length IS NOT NULL AND
width IS NOT NULL AND
height IS NOT NULL AND
dimensional_unit IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

变得更短.

使用Oracle,如果它是相关的.

dan*_*era 16

根据德摩根定律:

NOT(A或B)=(不是A)和(不是B)

你节省了20个字符;)

NOT (
weight IS NULL OR
weight_unit IS NULL OR
length IS NULL OR
width IS NULL OR
height IS NULL OR
dimensional_unit IS NULL 
)
Run Code Online (Sandbox Code Playgroud)


Flo*_*ita 2

据我所知,没有这样的语法。

但如果它们都是数字,你可以使用这个技巧:

weight + weight_unit + length + width + height + dimensional_unit is not null
Run Code Online (Sandbox Code Playgroud)

  • 如果任何列有索引,那将是一个坏主意,因为它会阻止数据库使用索引来回答查询。最好坚持使用 AND。 (7认同)
  • 如果有人想将此技巧转换为 varchar2 或 varchar 列的串联,则 id 将不起作用。在Oracle中使用串联。`一个|| 如果“B”为空,则“B”将为“A”。所以'C1 || C2 || C3 || 如果任何一列不为空,C4' 将不为空。 (2认同)
  • @sacundim - 这里真的不是问题。不管你怎么做,6 个链接的“IS NOT NULL”条件都不会是索引友好的。 (2认同)
  • Oracle B-Tree 索引没有空值,而位图索引有。然而,Oracle 还具有完整索引扫描和快速完整索引扫描访问路径,在某些情况下可以仅从索引回答查询,而无需访问表。此外,还有一个索引位图转换访问路径,可以组合多个索引。当您可以使用原始函数的连接时,使用复杂的函数限制并不是一个好主意。数据库有更多机会优化后者——不仅是今天的数据库,还有未来的改进版本。 (2认同)