1

SQLを使用して、以下のパターンを一致させる必要があります。

  1. "* ありがとうございました"
  2. "* 音楽 *"
  3. "音楽が好きです"
  4. 「私は*音楽と*絵が好きです」

入力文字列は次のようになります。
"HI THANK YOU" -> "* THANK YOU" と一致する必要があります。
"I LIKE MUSIC VERY MUCH" -> "* MUSIC *" と一致する必要があります。

標準の SQL 構文を使用してこれを行う方法はありますか。

助けてください。

ありがとうございました。

4

2 に答える 2

1

MySQLを使用してこれを行う方法を見つけました。

SELECT * FROM knowledge WHERE 'HI THANK YOU' REGEXP pattern_col;

pattern_col は正規表現を保持します。

于 2013-04-14T09:08:47.377 に答える
1

Oracle MySQL サンプルクエリ:

大文字小文字を区別しません:

select * from database where column like '%THANK YOU%';

大文字と小文字を区別:

select * from database where column LIKE BINARY '%THANK YOU%';

大文字小文字を区別しません:

select * from database where column REGEXP 'THANK YOU';

オラクルのクエリ:

select * from database WHERE REGEXP_LIKE(column, 'THANK YOU', 'i')

Oracle では LIKE を使用できますが、大文字と小文字を区別しない設定はバージョンによって異なります。

大文字と小文字を区別:

select * from database WHERE column LIKE 'THANK YOU';

Oracle のように大文字と小文字を区別しないようにすることについては、多くの議論があります。そのためには reg_exp バージョンを使用し、大文字とi小文字を区別しないようにフラグを設定する方が簡単です。

更新 元の質問は、実際には私の最初の回答とは反対であり、データマイニング用に構築しているかなりの数のアプリについて本当に頭を悩ませました。実は昨夜このアイデアを思いつきましたが、元のポスターは私が投稿する前に投稿していました (Fiddle は停止していました)。MySQL では、正規表現を REGEXP 関数の両側に一致させることができます。したがって、式のリストをデータベースに保存すると、式のリストをエントリのテーブルまたは単一の文字列と実際に比較できます。

ここに SQL Fiddle を追加しました: http://sqlfiddle.com/#!8/701a0/2

元の例では、データベースの「regex」値がアスタリスクだけで始まっていることに注意してください。正規表現では、実際の文字列は、おそらく任意の文字に対して .* である必要があります。

Web サイト、米国のフリーダイヤル番号、Gmail アカウントなどを照合するための例をいくつか追加しました。

INSERT INTO `myRegex` VALUES (1,'.* THANK YOU$'),(2,'MUSIC'),(3,'I LIKE .* MUSIC'),(4,'I LIKE .* MUSIC AND .* PAINTING'),(5,'^[0-9]?[ .-]?(800|866)'),(6,'\\.com$'),(7,'\\.net$'),(8,'\\.(gmail|googlemail)\\.'),(9,'THANK YOU');

出力

select * from myRegex where 'HI THANK YOU' REGEXP reg_expr;

ここに画像の説明を入力

select * from myRegex where 'THANK YOU MUCH' REGEXP reg_expr;

ここに画像の説明を入力

于 2013-04-14T03:01:41.603 に答える