查找任何列与搜索模式匹配的行

Sag*_*ana 8 oracle

我有一个"Test"包含 15 个不同数据类型的不同列的表。

我正在寻找具有像"ABC". 但是"ABC"可以出现在任何列中,我想找到具有"ABC".

我不能使用 WHERE 子句限制行,因为我真的不知道ABC驻留在哪一列?有没有办法做到这一点?

Erw*_*ter 5

好吧,有一种简单明了的“蛮力”方式:

SELECT *
FROM   "Test"
WHERE (col1 LIKE '%ABC%' OR
       col2 LIKE '%ABC%' OR
       col3 LIKE '%ABC%' OR
       ...
       col15 LIKE '%ABC%');
Run Code Online (Sandbox Code Playgroud)

如果您没有其他WHERE表达式,则不需要括号。可能比为单个LIKE测试连接所有列更快(并且在任何情况下都更健壮)。


小智 1

使用 instr 内置函数,您可以这样做:

Select * from Test where instr(col1||col2||col3,'ABC') <> 0;
Run Code Online (Sandbox Code Playgroud)

  • 这样的查询将返回 col1='A' 和 col2='BC' 的行。 (4认同)