単語が表示される大文字と小文字や順序を気にせずに、ワイルドカード(Oracleの場合)を使用して検索する方法。
たとえば、を検索するとlike '%a%b%'
、* a * b *、* A * B *、* b * a *、* B * A *を含む値が返されるはずです。これは単なるサンプルであり、検索には5つ以上の単語が含まれる可能性があります。 ANDを使用するのではなく、1つの式だけで結果を取得することができます。
select *
from yourtable
where yourfield like '%a%'
and yourfield like '%b%'
または、 OracleTextを調査することもできます
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*
。もう1つの解決策は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