1. ホーム
  2. データベース
  3. 神託

オラクルのファジー・クエリーとその使い方

2022-01-08 17:20:35

オラクルファジークエリーの使用例

I. where節でのlikeキーワードの使用

where節でlikeキーワードを使用してOracleファジー・クエリの効果を得ることができる。where節では、datetime、char、varcharフィールドタイプのカラムに対してワイルドカードを使用してlikeキーワードを使用し、ファジー・クエリを実現することができる。

以下のワイルドカードを使用することができます。

  • % : 0文字以上、3つのケースで % を使用します。
  • キーワード%」のようなフィールドには、"キーワード"レコードが含まれます。
  • キーワード'のようなフィールドが"Keyword"で始まるレコード。
  • キーワード'のようなフィールドを持つレコードは、"Keyword".で終わります。

SELECT * FROM [user] WHERE uname LIKE '%three%' 
// search results: "Zhang San", "Xiao San", "three-legged cat", "cat three-legged" with Find all the records with "three". 
SELECT * FROM [user] WHERE uname LIKE '%three' (match from the back) 
//search results: "Zhang San", "Xiao San" 
// Also, if you need to find a record with both "three" and "cat" in uname, use the and condition 
SELECT *FROM [user] WHERE uname LIKE '%three%' AND uname LIKE '%cat%' 
If you use SELECT * FROM [user] WHERE uname LIKE '%three%cat%'// you can search for "three-legged cat", but not "cat three-legged".



1._

式文の文字数を制限するために、any文字(アンダースコア)1文字がよく使われます。

SELECT * FROM [user] WHERE uname LIKE 'three' 
// search result: "cat three feet" such that uname is three characters and the middle one is "three". 
SELECT * FROM [user] WHERE uname LIKE 'three__'; 
//search results: "three-legged cat" where uname is three characters and the first one is "three".



2.[]

括弧内に記載された文字のいずれかを表す範囲の文字(正規表現に似ている)。マッチしたオブジェクトがそのいずれかになることを要求する文字、文字列、または範囲を指定する。

SELECT * FROM [user] WHERE u_name LIKE '[张李王]三' 
//search results: "Zhang San", "Li San", "Wang San" (instead of "Zhang Li Wang San"). 
// if [ ] has a series of characters (01234, abcde, etc.) can be abbreviated to "0-4", "a-e" 
SELECT * FROM [user] WHERE u_name LIKE 'old [1-9]' 
// search results: "old 1", "old 2", ......, "old 9".



3.[^]

範囲外の文字、使い方は[ ]の反対です。

次に、str(strSource,strTarget)関数は、Oracleで提供されている

instr(strSource,strTarget) 関数は Oracle で提供されており、'%Keyword%' パターンを使用するよりもはるかに効率的である。

また、instr関数には3つのケースがあります。

  • instr(field,'keyword')>0 は '%keyword%' のようなフィールドと同等です。
  • instr(field,'keyword')=1 は '%Keyword' のようなフィールドと同等です。
  • instr(field,'keyword')=0 は、'%keyword%' のようでないフィールドと同等です。

SELECT * FROM [user] WHEREinstr(uname ,'three')>0 



使い方は、上のLikeを参考に

特別な使い方

select id, namefrom user where instr('101914, 104703', id) > 0; 



と同等です。

select id, namefrom user where id = 101914 or id = 104703;


以上、オラクルのファジー・クエリのwhere句の使い方を詳しく説明しましたが、オラクルのファジー・クエリの使い方については、Scripting Houseの他の関連記事にもご注目ください。