プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PostgreSQL、配列型を検索条件に含めた時の型変換エラー(未解決)。
PostgreSQL+PHPのお仕事をいただいてやっていたのですが、
配列型のカラムを使っているテーブルがありました。

あー・・嫌いなんだよなぁ、配列型。

とは言っても選り好み出来る立場でも無いので
やるとしますか。

ちなみにテーブル(tbl_hoge)に配列型のカラム(array_column)があるとして
配列型のカラムを検索条件に使いたい場合は

完全一致 → tbl_hoge.array_column = ほげほげ
含まれる → tbl_hoge.array_column @> ほげほげ
共通要素を持つ → tbl_hoge.array_column && ほげほげ

となります。
まぁ他にも色々あったりするみたいですがどーでもいーや。
取りあえずこれだけ覚えておけば何とかなるでしょ?

ほんでまぁ、適当に実装してSQLを流してみたのですが
以下のようなエラーが出たのですよ。

 aaa=# select * from tbl_hoge where array_column @> array[24,25,26,27,28];
 ERROR: operator does not exist: integer[] @> integer[]
 HINT: No operator matches the given name and argument type(s).
 You may need to add explicit type casts.


エラー自体は型が不一致ですよのエラーなのですが・・・
どっちもinteger[]だけど駄目なの(--?

あれやこれやとやっても駄目。

select * from tbl_hoge where CAST(array_column AS integer[]) @> CAST(array[24,25,26,27,28] AS integer[]);

とか悪あがきしてもやっぱり駄目。
結局妥協して

select * from tbl_hoge
where 24 = ANY(array_column)
and 25 = ANY(array_column)
and 26 = ANY(array_column)
and 27 = ANY(array_column)
and 28 = ANY(array_column)
;


とかやって終わりにしちゃったんだけど
誰か分かる人がいたら教えて下さいm(__)m
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PostgreSQL  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事