私はこの次のコードを持っています:
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
。その場合、更新によって何も変更されませんが、コストは同じです。代わりに何もしないでください。関連(最後の段落を考慮してください):
ここでは変数は必要ありません。