我试图清除过多的尾随零,我使用了以下查询......
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
);
答案 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文档here和here。
修改:另请参阅gnumed-devel
邮件列表中的the following帖子,以获得有关此方法的更详尽的解释。