所有列上的Oracle SQL Instr + NVL [重复]

kzmpq1sx  于 2023-05-28  发布在  Oracle
关注(0)|答案(1)|浏览(154)

此问题已在此处有答案

Oracle SQL - How to build where clause with optional search parameters(5个答案)
Oracle: Full text search with condition(4个答案)
18小时前关闭
需要一个查询来使用一行搜索所有表列。这是我到目前为止的查询:

select * from my_table 
where
instr( 
Col01 || Col02 || Col03 || Col04 || Col05 || Col06 || Col07 || Col08 || Col09, 'My Searched 
Text') > 0

但根据要求,当搜索的值为空时,必须显示整个表。有没有办法做到这一点?

kdfy810k

kdfy810k1#

你可以这样做:
注意:仅仅因为这是你更新你的坏解决方案的方式,并不意味着这是一个好主意。你应该在每一列上执行一个指令,并在它们之间使用OR。

instr(
  coalesce(Col01,'')  || 
  coalesce(Col02,'')  ||
  coalesce(Col03,'')  || 
  coalesce(Col04,'')  || 
  coalesce(Col05,'')  || 
  coalesce(Col06,'')  || 
  coalesce(Col07,'')  ||
  coalesce(Col08,'')  ||
  coalesce(Col09,'') , 'My Searched Text') > 0

另一种选择是创建一个“计算”列,它是在表插入或更改时自动生成的,包含上述串联。那么在查询时只需要搜索一列。

相关问题