2

如何使用通配符(在 Oracle 中)进行搜索,而不用担心单词出现的大小写或顺序。

例如,如果我搜索like '%a%b%',它应该返回包含 *a*b*、*A*B*、*b*a* 和 *B*A* 的值 这只是一个示例,搜索可能有 5 个或更多单词,是它可能只用一个表达式而不是使用 AND 来获得结果。

4

2 回答 2

3
select * 
from yourtable
where yourfield like '%a%'
and yourfield like '%b%'

或者您可以调查Oracle Text

于 2012-09-06T13:42:22.963 回答
0
select * from table
 where upper(column) like '%A%B%';

或者

select * from table
 where lower(column) like '%a%b%';

或者

select * from table
 where upper(column) like '%A%'
   and upper(column) like '%B%';

或者

select * from table
 where lower(column) like '%a%'
   and lower(column) like '%b%';

但是,如果您想了解*a*b**b*a*等等。另一种解决方案是CHARS在第一个中进行排序,VARCHAR即如果你有一个类似的字符串,aebcd然后对其进行排序,abcde然后使用 like 进行模式匹配。根据这个,您可以使用以下查询对 varchar 中的字符进行排序,然后对其进行模式匹配。

SELECT 1 val
FROM (SELECT MIN(permutations) col
        FROM (SELECT REPLACE (SYS_CONNECT_BY_PATH (n, ','), ',') permutations
                FROM (SELECT LEVEL l, SUBSTR ('cba', LEVEL, 1) n
                        FROM DUAL   --replace dual by your table
             CONNECT BY LEVEL <= LENGTH ('cba')) yourtable
      CONNECT BY NOCYCLE l != PRIOR l)
        WHERE LENGTH (permutations) = LENGTH ('cba')) temp_tab
  WHERE upper(col) like '%A%B%';

退货

val 
------------------
1
于 2012-09-06T14:00:43.180 回答