[pgsql-jp: 33685] Re: [Q]配列内の文字列検索について
Yoshio Funaki
yoshio @ apl.pref.akita.jp
2004年 7月 15日 (木) 17:34:09 JST
加藤@川崎さん、ありがとうございます。船木@秋田県立図書館です。
(snip)
>毎度ネタで毎度答えてたりしますが(笑)、 contrib/array を利用されると
>ハッピーになれると思います。
># 過去ログで array (と 加藤) で探せば出てくると思います
すみません。お伺いしたい内容が、情報不足でうまく伝わらなかったみたいです。
contrib/arrayに関しては、7.3位から導入検討してまして、7.4でbase systemに
取り込まれたので、本格実験したりしてます。
# select文法が変わったりしてちょっととまどってますが。
で、なんか情報小出ししてるみたいでいやなんですが
test=# select * from t3 where '新秋田叢書' ~ any(data);
なんてやってみると
title_code | tag | data
------------------+------+--------------
5010000003 | 270A | {秋田}
5010000036 | 251A | {新秋田叢書}
5010000036 | 551B | {新秋田叢書}
5010000037 | 251A | {新秋田叢書}
5010000037 | 551B | {新秋田叢書}
と言う結果が返ってきたりします。
/contrib/array/README.array_iteratorによれば
Similarly, if using contrib/array, you did the following:
-- select tuples with all txt elements matching '^[A-Z]'
select * from t where t.txt[1:3] **~ '^[A-Z]';
Now do this instead:
-- select tuples with all txt elements matching '^[A-Z]'
select * from t where '^[A-Z]' ~ all (t.txt[1:3]);
と言うことだそうですので
select * from t3 where '新秋田叢書' ~ any(data);
は{新秋田叢書}にマッチしても{秋田}にマッチするとは思えないんで?なんです。
同じ事なんですが
test=# select * from t3 where '%秋田叢書%' ~ any(data);
についても
title_code | tag | data
------------------+------+--------
5010000003 | 270A | {秋田}
5010000116 | 270A | {秋田}
5010000123 | 270A | {秋田}
5010000125 | 270A | {秋田}
5010000127 | 270A | {秋田}
5010000129 | 270A | {秋田}
が返ってきます。
当然、
test=# select * from t3 where '新秋田叢書' = any(data);
については
title_code | tag | data
------------------+------+--------------
5010000036 | 251A | {新秋田叢書}
5010000036 | 551B | {新秋田叢書}
5010000037 | 251A | {新秋田叢書}
5010000037 | 551B | {新秋田叢書}
5010000038 | 251A | {新秋田叢書}
が返ってきます。
と言うことなので、
「配列内文字列に関する部分一致検索を行うのはどうしたらよいでしょうか?」
と言うのがお伺いしたかった内容です。
蛇足:
test=# select * from t3 where '新秋田叢%' ~ any(data);
title_code | tag | data
------------------+------+--------
5010000003 | 270A | {秋田}
5010000116 | 270A | {秋田}
----
Yoshio Funaki yoshio @ apl.pref.akita.jp
pgsql-jp メーリングリストの案内