人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[postgresql]
postgresql 8.3以降、型変換のチェックが厳しくなったようで
8.1で問題なかった下記SQLが9.1ではエラーを起こすようになりました。

varchar で定義されているフィールドを数値で検索したい
select * from t_sample where varcharcol = 1
ERROR: operator is not unique: character varying = integer at character 45
HINT: Could not choose a best candidate operator. You might need to add explicit type casts.

もちろん文字列型で検索するように''で囲んで
select * from t_sample where varcharcol = '1'
とするとエラーにはならないのですが、アプリケーション内で利用しているため
できればアプリケーションをなおさずに対処したいと考えています。

暗黙変換を期待して下記CAST文を投入したのですが、自動変換してくれないようです。
CREATE CAST (int2 AS varchar) WITH INOUT AS IMPLICIT;
CREATE CAST (varchar AS int2) WITH INOUT AS IMPLICIT;

8.3以前のversionと互換にさせる対処方法ご存じの方教えて下さい。


●質問者: piro_yamagoo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● だわかき
●50ポイント

CREATE FUNCTIONしてからCREATE CASTしてください。

詳しくは下記サイトをご覧下さい。
http://lets.postgresql.jp/documents/tutorial/cast/


2 ● うぃんど
●50ポイント

他にどのようなセッティングをしておられるのかわかりませんが、
integerのデフォルトは int2 ではなく int4 なので質問にあるCAST文には引っかからないです。


うぃんどさんのコメント
もちろん、CREATE FUNCTIONなんて古い方式は無関係です。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ