我有如下代码:
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
函数,但是不知道如何正确使用。
有什么想法吗?
Like this:
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 -- cast to actual type (if not a string type)
AND "order" IS DISTINCT FROM 1;
expression::type
是Postgres的简单(非SQL标准)类型转换方式。有关详细信息,请参阅手册中的类型转换章节。
有关PostgreSQL中的数据类型的更多信息。
我添加的最后一个谓词在"order"
已经是1
时非常有用,此时更新不会改变任何内容-代价很大。与其如此,不如什么都不做。相关内容请参见最后一段:
您不需要一个变量。