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我添加的最后一个谓词 if could already be 很有用1,在这种情况下更新不会改变任何东西,但成本仍然相同。而是什么都不做。相关(考虑最后一段):

而且您在这里不需要变量。

于 2013-02-07T22:33:43.237 回答