- ベストアンサー
~以外のSQLについて
SELECT文で文字列の中に例えば'g'があればそれを除いて表示するみたいな事ってできるのでしょうか? LIKEはその文字があればその文字をひっぱってきますよね~?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> できれば、LIKEを使用したくないのですが。。 PostgreSQL ならば LIKE 以外に SIMILAR TO / SQL99 の正規表現 POSIX正規表現 と、ドキュメントの 第 9章関数と演算子 9.6 パターンマッチング に書いてあります。 # パフォーマンスにどのくらいの差がでるかわかりませんので それぞれの方法で試してみてはいかがでしょうか。
その他の回答 (2)
- Mizyu
- ベストアンサー率41% (245/593)
> できれば、LIKEを使用したくないのですが。。 ムリです。 PL/pgSQLなどを用いて行う方法やアプリケーション側で吸収するくらいしか方法はありませんが Likeを使うのと比較してパフォーマンスが落ちます。 SQLのみで要件を満たすとなるとLikeを用いるしかないです。 検索に時間をかけたくないのであれば、データ定義、データエントリ時に工夫を入れるほうが よっぽど理想的ですね。 例えば、運用で'g'のLike検索を常に使う場合、 データ定義の際、"g_flg"などの名前でフラグを格納するカラムをテーブル内に定義。 エントリの時点で、gの有無を判定し、フラグに1 or 0のデータを入力。 参照時にはそのフラグを検索キーにて検出。 このような工夫をすることで参照にかかる時間短縮は可能です。 ただ、上記の方法だと、データの容量が増えてしまうというデメリットもあり、 一長一短です。どちらかを切り捨てる必要がありますね。 また、'g'の位置が決まっている場合はSubStringなどの関数を使った検索も可能です。 運用形態や今抱えている「縛り」を把握した上で最善を考える必要がありそうですね。 ともかく、SQLだけならLikeしかないです。
お礼
ありがとうございます!!
- Mizyu
- ベストアンサー率41% (245/593)
該当カラムの文字列データに「g」が含まれているもの以外すべてを選択するWhere句ということでしょうか? SELECT * FROM テーブル名 WHERE カラム名 Not Like '%g%' で、できます。
補足
ありがとうございます。 ただ、LIKEは遅くなるので できれば、LIKEを使用したくないのですが。。
お礼
ありがとうございます。 試してみます。