- - PR -
postgresql 配列フィールドの検索について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-01 19:24
postgresql-8.1のwindows版で開発を行っています。
フィールドでtext[]型を使用しています。 このフィールドの前方一致または後方一致の検索を行いたいのですが、 これは可能でしょうか? また、可能であれば方法をご教授頂けますでしょうか? 下記のように試したのですがダメでした。 例、arry_textフィールドの「あ」の前方一致 テーブル名:tbl フィールド名:arry_text フィールドの型:text[] フィールドの値:{ 'あいう','かきく','さしす','たちつ' } @SELECT * FROM tbl WHERE 'あ' LIKE ANY(arry_text); エラーはでない、(完全一致の方法) ASELECT * FROM tbl WHERE 'あ' = ANY(arry_text); エラーはでない、(完全一致の方法) BSELECT * FROM tbl WHERE 'あ%' LIKE ANY(arry_text); エラーはでない、前方一致ではない CSELECT * FROM tbl WHERE 'あ%' LIKE ANY(arry_text%); エラーになる DSELECT * FROM tbl WHERE 'あ%' LIKE ANY('arry_text%'); エラーになる ESELECT * FROM tbl WHERE ANY(arry_text) LIKE 'あ%'; エラーになる FSELECT * FROM tbl WHERE arry_text LIKE 'あ%'; エラーになる GSELECT * FROM tbl WHERE arry_text LIKE ANY('あ%'); エラーになる 以上、よろしくお願いします | ||||||||
|
投稿日時: 2006-02-01 21:25
こんな手はありでしょうか?
generate_seriesって関数で配列の添え字を返し、 その添え字に対応する要素のデータを取得する。 取得したデータに対してLIKE文で検索を行うってSQLです。 generate_seriesを取得する際に対象テーブルの列の最大添え字数を指定するため、 array_upperを用いてます。 array_upperを用いる時のテーブルレコードは1件でいいので、 適当にWhere句をつけて1件になるようにしました。 #要素数がレコードによってマチマチだと大変かも。 今回検証した前提は以下のとおりです。 testテーブルにはcol1というvarcharの配列型の列があり、 データとして "{あいうえお,かきくけこ,さしすせそ}" "{たちつてと,なにぬねの,はひふへほ}" の2レコードがあるとする。
結果
| ||||||||
|
投稿日時: 2006-02-02 10:28
夏椰|。σ)oさん
ご回答ありがとうございます 教えて頂いたコード+distinctで上手くいきました。 ありがとうございました。 |
1