SELECT文でDB内を検索にかけ、「特定の列のデータ」が「検索単語」内に含まれる場合にその行を取得する、という正規表現を書きたいのですが可能でしょうか。(「特定の列のデータ」内に「検索単語」が含まれる、というのの逆になる点に注意してください。)
例)
DB内の特定の行には"TEST"という文字列が格納されているものとしますした場合、下記例では
検索データ
1・・・"TEST_AAAA" ・・・検索にHITする
2・・・"BBB_TEST" ・・・検索にHITする
3・・・"CCC_TEST_CCC" ・・・検索にHITする
4・・・"TE_DDD_ST" ・・・検索にHITしない
5・・・"EEE" ・・・検索にHITしない
以上、よろしくお願いします。
PostGreSQLは、標準のSQLに準拠しているので
%: 任意の文字数の任意の文字
_: 1文字の任意の文字
をサポートしています。
ご回答ありがとうございます。
それは知っていますが、知りたいのは私が求めていることが可能かどうかです。
WHERE '検索単語' like '%' || 列名 || '%';
でいいと思います。
実際試して出来ましたlol
ご回答ありがとうございます。
正規表現に未熟なものでどうしてOKなのかわかりませんが、研究してみたいと思います。
ありがとうございました!
添付忘れ
PostGreSQLのパターンマッチング仕様
正規表現を使う方法でも、又はorでも可能
PostGreSQL 7.3.4
http://kaiunix.cs.shinshu-u.ac.jp/Lesson/DataBaseIT/manual/7...
PostGreSQL 7.4
http://osb.sraoss.co.jp/PostgreSQL/Manual/PostgreSQL-7.4-ja/...
PostGreSQL 8.0
http://osb.sraoss.co.jp/PostgreSQL/Manual/PostgreSQL-8.0-ja/...
ご回答ありがとうございます。
マニュアルなら見たのですがそれでもわからなかったもので・・・
正規表現ではありませんが、特定の列を A とすると
SELECT A FROM TEST_TABLE WHERE 'TEST_AAAA' LIKE '%' + A + '%' ;
でどうでしょうか?
ただ、確実にインデックスは使えないので、データ量が多くなるとリニアに検索速度が遅くなると思います。
ご回答ありがとうございます。
いただいた正規表現で試してみます。
> ただ、確実にインデックスは使えないので、データ量が多くなるとリニアに検索速度が遅くなると思います。
これは盲点でした・・・
ご注意ありがとうございます。
SELECT A FROM TEST_TABLE WHERE 'TEST_AAAA' LIKE '%' || A || '%' ;
すいません前述のクエリは間違いで上が正解です。
文字列の結合演算子は || であることを忘れていました。
訂正ありがとうございます~
table名: tbl カラム名: col
とした場合
TESTを含む行を抽出する。
# LIKE
select col from tbl where col like '%TEST%';
# POSIX( 大文字小文字区別なし )
select col from tbl where col ~* '.*TEST.*';
# POSIX( 大文字小文字区別あり )
select col from tbl where col ~ '.*TEST.*';
ふむふむ
たびたびすいません逆の回答です。
#
select * from tbl where
upper('bc TEST ac')
SIMILAR TO '%'||upper(col)||'%';
LIKEでもできますがSIMILARの方がより
複雑な処理ができます。
SIMILARですか。初耳でした。ありがとうございます。
upperは大文字に統一して大文字小文字の区別をなくすためですね。確かに考えておかないといけない処理でした。
ありがとうございました~
>ちょいと疑問なのですが、
>AA_BTESTC_DD
>のような場合はHITさせるのでしょうか?
はい、HITさせたいです。
であれば、正規表現ではなくあいまいでできますね。
SELECT T.a FROM t_table T WHERE '検索文字列' LIKE '%' || T.a || '%'
対象が数値型なら
SELECT T.a FROM t_table T WHERE '検索文字列' LIKE '%' || TO_CHAR(T.a) || '%'
ご回答ありがとうございます。
試してみたいと思います~
ご回答ありがとうございます。
正規表現に未熟なものでどうしてOKなのかわかりませんが、研究してみたいと思います。
ありがとうございました!