web-dev-qa-db-ja.com

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を使用してみましたが、正しく使用する方法がわかりません。

何か案は?

8
Georgy Passos

このような:

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

INTEGERの代わりに適切な数値型を使用してください)。

14
Anton Kovalenko

またはもっと簡単:

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の方法です。章のマニュアルの詳細 型キャスト
詳細 PostgreSQLのデータ型

私が追加した最後の述語は、orderがすでにbe1である可能性がある場合に役立ちます。この場合、更新は変更されません。何でも、それでも同じ費用がかかります。代わりに何もしません。関連(最後の段落を検討してください):

そして、ここでは変数を必要としません

7