2013-02-07 24 views
6

私はこの次のコードを持っている:PostgreSQL(9.1)関数内で文字を整数に変換するにはどうすればよいですか?

BEGIN 
    x := split_part(text, ',', 1); 
    UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = x; 
END 

をしかしidxという名前の、私の列の表は、数値型で、split_partは、変数xに文字型を返します。 CASTを試してみましたが、正しく使用する方法がわかりません。

アイデア?このよう

答えて

9

UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = CAST (x AS INTEGER); 

(代わりにINTEGERの使用に適切な数値型)。

7

それとも単純:

UPDATE albumphoto 
SET order = 1 
WHERE idtable = 1 
AND idx = split_part(text, ',', 1)::int -- or whatever type it is 
AND order IS DISTINCT FROM 1; 

expression::typeはキャストするための簡単な(非SQL標準)Postgresの方法です。詳細は、Type Castsの章のマニュアルを参照してください。
詳細data types in PostgreSQLについて

orderが既に更新が何も変更し、それでも同じ費用がかかりません。その場合には、1ことができれば、私は最後に追加した述語は便利です。むしろ何もしないでください。関連(最後の段落を考慮):

そして、あなたはがここ変数は必要ありません。

関連する問題