私はこの次のコードを持っています:
BEGIN
x := split_part(text, ',', 1);
UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = x;
END
しかし、名前付きの列テーブルidxは数値型でありsplit_part、変数に文字型を返しますx。を使ってみCASTたのですが、使い方がよくわかりません。
何か案は?
私はこの次のコードを持っています:
BEGIN
x := split_part(text, ',', 1);
UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = x;
END
しかし、名前付きの列テーブルidxは数値型でありsplit_part、変数に文字型を返しますx。を使ってみCASTたのですが、使い方がよくわかりません。
何か案は?
このような:
UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = CAST (x AS INTEGER);
( の代わりに適切な数値型を使用してくださいINTEGER)。
またはより簡単に:
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の章を参照してください。PostgreSQL のデータ型の
詳細。
最後に追加した述語は、order既に である可能性がある場合に役立ちます 1。その場合、更新によって何も変更されませんが、コストは同じです。代わりに何もしないでください。関連(最後の段落を考慮してください):
ここでは変数は必要ありません。