10

私はこの次のコードを持っています:

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

しかし、名前付きの列テーブルidxは数値型でありsplit_part、変数に文字型を返しますx。を使ってみCASTたのですが、使い方がよくわかりません。

何か案は?

4

2 に答える 2

19

このような:

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

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

于 2013-02-07T20:05:57.490 に答える
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の章を参照してください。PostgreSQL のデータ型の
詳細。

最後に追加した述語は、order既に である可能性がある場合に役立ちます 1。その場合、更新によって何も変更されませんが、コストは同じです。代わりに何もしないでください。関連(最後の段落を考慮してください):

ここでは変数は必要ありません。

于 2013-02-07T22:33:43.237 に答える