PostgreSQL修剪过多的尾随零:键入numeric但表达式是text类型

时间:2015-01-14 20:50:31

标签: postgresql

我试图清除过多的尾随零,我使用了以下查询......

UPDATE _table_ SET _column_=trim(trailing '00' FROM '_column_');

...我收到以下错误:

  

错误:列" _column _"是的   表达式是文本类型。

我已经使用了引号,因为它通常是文本与数字相比,虽然没有任何运气。

CREATE TABLE语法:

CREATE TABLE _table_ (
 id bigint NOT NULL,
 x bigint,
 y bigint,
 _column_ numeric
);

4 个答案:

答案 0 :(得分:6)

您可以将参数和结果转换回数字:

UPDATE _table_ SET _column_=trim(trailing '00' FROM _column_::text)::numeric;

另请注意,您不会像使用单引号引用列名。

答案 1 :(得分:3)

Postgres 版本 13 现在带有 trim_scale() 函数:

UPDATE _table_ SET _column_ = trim_scale(_column_);

答案 2 :(得分:2)

trim接受字符串参数,因此必须将_column_强制转换为字符串(例如varchar)。然后,trim的结果必须转回numeric

UPDATE _table_ SET _column_=trim(trailing '00' FROM _column_::varchar)::numeric;

答案 3 :(得分:2)

NUMERIC字段中清除尾随零的另一种(可以说是更一致的)方法是使用如下内容:

UPDATE _table_ SET _column_ = CAST(to_char(_column_, 'FM999999999990.999999') AS NUMERIC);

请注意,您必须修改FM模式,以匹配precision字段的最大预期scale_column_。有关FM模式修饰符和/或to_char(..)函数的详细信息,请参阅PostgreSQL文档herehere

修改:另请参阅gnumed-devel邮件列表中的the following帖子,以获得有关此方法的更详尽的解释。