• ベストアンサー

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%' ではだめなのはわかりましたが、こういう場合、どう検索したらよいのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.2

カテゴリはPostgreSQLなので、まあバージョンだけは明記すべきでしょうな。 厳密に動作確認はしていませんが、マッチする範囲が広い条件を先にすれば、問題ないかと思います。 select * from sample where text not like '%LONG2%' and text like '%LONG%'

Taaat
質問者

お礼

ありがとうございます。 しかし、思った結果が得られませんでした。 パターンマッチでやってみます。

その他の回答 (1)

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.1

データベースの種類(Oracle?)やバージョンなどがわからないので、今回のケースにとりあえず対応したベタな例で・・・。 SELECT * FROM sample WHERE text LIKE '%LONG+%' AND text LIKE '%LONG)%' データの形式詳細や、使用しているデータベースのプロダクト名とバージョンを記載すると、もう少しスマートな例を挙げてくれる人がいるでしょう。

Taaat
質問者

お礼

回答、ありがとうございます。 データベースはPostgreSQL8.0.3 for Windowsです。 上記ではダメでした。括弧の位置とか+は任意の場所になります。 LIKEではダメなのですかね?? パターンマッチを使用するしかないのでしょうか?? SELECT * FROM t_sample WHERE text ~ 'LONG[^2]' しかし、レコードにADLONGなんてあった場合、上記じゃダメですよね。。。

関連するQ&A