- ベストアンサー
LIKEによる検索について
お世話になります。 id| text --+-------------- 1 |AD(LONG+LONG2+INT) --+-------------- 2 |AD(INT+LONG) --+-------------- 3 |AD(LONG2+INT) --+-------------- : | : というテーブル(sample)がありまして、 textカラムの'LONG'だけをを抽出したいのですが、うまく抽出できません(LONG2なども検索されてしまう)。 SELECT * FROM sample WHERE text LIKE '%LONG%' AND text NOT LIKE '%LONG2%' ではだめなのはわかりましたが、こういう場合、どう検索したらよいのでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
カテゴリはPostgreSQLなので、まあバージョンだけは明記すべきでしょうな。 厳密に動作確認はしていませんが、マッチする範囲が広い条件を先にすれば、問題ないかと思います。 select * from sample where text not like '%LONG2%' and text like '%LONG%'
その他の回答 (1)
- kougasha
- ベストアンサー率32% (34/105)
データベースの種類(Oracle?)やバージョンなどがわからないので、今回のケースにとりあえず対応したベタな例で・・・。 SELECT * FROM sample WHERE text LIKE '%LONG+%' AND text LIKE '%LONG)%' データの形式詳細や、使用しているデータベースのプロダクト名とバージョンを記載すると、もう少しスマートな例を挙げてくれる人がいるでしょう。
お礼
回答、ありがとうございます。 データベースはPostgreSQL8.0.3 for Windowsです。 上記ではダメでした。括弧の位置とか+は任意の場所になります。 LIKEではダメなのですかね?? パターンマッチを使用するしかないのでしょうか?? SELECT * FROM t_sample WHERE text ~ 'LONG[^2]' しかし、レコードにADLONGなんてあった場合、上記じゃダメですよね。。。
お礼
ありがとうございます。 しかし、思った結果が得られませんでした。 パターンマッチでやってみます。