2011-01-21 7 views
12

CASTに 'character varying'を 'integer'に変換するのに適した関数を作成します。誰も関数を提案できますか?私が試したすべてが失敗する。PostgreSQL。 CREATE CAST 'characters varying' to 'integer'

+4

と手順に

SELECT ... WHERE code = l_code AND .. 

を置き換える解決しました。あなたの声明に暗黙のキャストを頼りにしてはなりません。 –

+0

私は同意します。しかし、私は既製のソフトウェアを使っているわけではありません。 – Simon

答えて

17

これを使用します。

CREATE CAST (varchar AS integer) WITH INOUT [AS IMPLICIT]; 

これは、関連するデータ型の入出力機能を使用します。

+2

暗黙のキャストを見直して修正するために3kを超えるビュー/ sp /クエリがあります。このf ****簡単な回避策が付属しています。それは私にはるかに時間がかかるでしょう。ジョブセーバーありがとう! (なぜpostgresの開発者がこれのためにpostgresql.confにパラメータを入れなかったのだろう...) – Christian

+3

私たち(PostgreSQL開発者)は生きて学習します。 –

0

暗黙のキャストに関するPostgres 8.3の動作を取り戻したいと思っています。

例については、このブログのエントリを参照してください:
http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html

ああ:壊れたSQLを修正するためのソフトウェアのベンダーやバグ;)

編集

これはそれを行う必要があります。

 
CREATE FUNCTION toint(varchar) 
    RETURNS integer 
    STRICT IMMUTABLE LANGUAGE SQL AS 
'SELECT cast($1 as integer);'; 

CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar); 
+0

うん。私はそれを見つけましたが、それは欠けていますint4(varchar) – Simon

+0

それは私が間違っていない場合int4と同じです整数のキャストが含まれています。 –

+0

私がばかげているが、関数のどれも整数を返さなければ、私を許してください。私はCREATE CAST(整数としてvarchar)を行うことを期待しています... – Simon

1

上記の関数は、明示的キャストを行うようにSQLを更新する場合に機能します。 しかし、「create cast」ステートメントの最後に 'as implicit'を追加すると、Postgresは整数を整数に変換できるvarcharと比較するときに何をしようとしているのかを自動的に突き止めることができます。ここで

は、「暗黙的に」動作するように見えた私の更新ステートメントです:

CREATE FUNCTION toint(varchar) 
    RETURNS integer 
    STRICT IMMUTABLE LANGUAGE SQL AS 
'SELECT cast($1 as integer);'; 

CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar) as Implicit; 
+0

この関数は、型自体をキャストするのではなく、クエリを発行する通常のDBユーザーとしてvarcharフィールドをキャストするのに役立ちました。 – johnmartirano

0

私は同じエラーを得ました。私はCOLUMN

コード様々なタイプのキャラクターとして宣言

(20)とint型として宣言されたローカル変数

l_code

を持っています。

私はあなたがimplictのキャストに頼らないためにあなたのSQLを修正する必要があり

code = cast(l_code as character varying) AND 
関連する問題