質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

1回答

9218閲覧

オラクルで中カッコをつけると検索結果が変わる。

tkshp

総合スコア174

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

1クリップ

投稿2016/12/01 09:13

編集2016/12/05 08:31

下記のコードのように、contains()において、検索する文字列を中カッコで括るか、括らないかによって、
検索結果が変わります。
中カッコを付けない場合はヒットせず、中カッコを付けた場合はヒットします。
文字列1と文字列2、 文字列2と文字列3の間にはそれぞれ半角スペースが含まれています。
中カッコはどんな役割を果たしているのでしょうか?
ご教授のほど宜しくお願いいたします。

SQL

1select * from テーブル名 where contains(カラム名,'文字列1 文字列2 文字列3') > 0; //ヒットしない。 2select * from テーブル名 where contains(カラム名,'{文字列1 文字列2 文字列3}') > 0; //ヒットする。

##試したこと。
調べたら、中カッコをつけると、予約語をエスケープするということはわかりました。
しかし、今回の例では「文字列1 文字列2 文字列3」に予約語や記号は一切使ってません。
文字列1~文字列3は日本語の漢字と全角のカタカナのみです。

##追記。具体的なデータと検索結果。
実際にsampleテーブルのidx_dataのカラムに入っているデータが下記です。

日本 国内産 モデル

・{}をつけない場合。

SQL

1select * from sample where contains(idx_data,'日本') > 0; → ヒットする。 2select * from sample where contains(idx_data,'国内産') > 0; → ヒットする。 3select * from sample where contains(idx_data,'モデル') > 0; → ヒットする。 4select * from sample where contains(idx_data,'日本 国内産') > 0; → ヒットしない。 5select * from sample where contains(idx_data,'国内産 モデル') > 0; → ヒットする。 6select * from sample where contains(idx_data,'日本 国内産 モデル') > 0; → ヒットしない。

・{}をつけた場合。

SQL

1select * from sample where contains(idx_data,'{日本}') > 0; → ヒットする。 2select * from sample where contains(idx_data,'{国内産}') > 0; → ヒットする。 3select * from sample where contains(idx_data,'{モデル}') > 0; → ヒットする。 4select * from sample where contains(idx_data,'{日本 国内産}') > 0; → ヒットする。 5select * from sample where contains(idx_data,'{国内産 モデル}') > 0; → ヒットする。 6select * from sample where contains(idx_data,'{日本 国内産 モデル}') > 0; → ヒットする。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

himakuma

2016/12/02 04:53

実際の値の例を記載できませんか?
tkshp

2016/12/05 08:32

ご指摘ありがとうございます。遅くなり申し訳ありません。実際の値の例を追記しました。
himakuma

2016/12/05 11:50

テーブルのレコードのidx_dataに設定されている値を列挙して下さい。取得対象のデータの状況が分からないと理由がわかりません。
Orlofsky

2016/12/05 21:32

Oracleの正確なバージョンは?SQLの動作確認が必要な時はCREATE TABLE, INSERT も載せましょう。
kpiyohiko

2016/12/13 06:24

参照しているテーブルの中身を記載していただけないでしょうか。
guest

回答1

0

このサイトが参考になると思います。

投稿2016/12/27 10:59

kpiyohiko

総合スコア658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問