我试图清除过多的尾随零,我使用了以下查询...
UPDATE _table_ SET _column_=trim(trailing '00' FROM '_column_');
...我收到了以下错误:
错误:列“column”的表达式类型为text。
我已经玩了引号,因为这通常是它桶下来的文本与数字,但没有任何运气。CREATE TABLE
语法:
CREATE TABLE _table_ (
id bigint NOT NULL,
x bigint,
y bigint,
_column_ numeric
);
5条答案
按热度按时间w3nuxt5m1#
您可以将参数和结果强制转换为数字:
还要注意的是,您不像以前那样用单引号引用列名。
jc3wubiy2#
Postgres版本13现在带有
trim_scale()
函数:oxosxuxt3#
trim
接受字符串参数,因此_column_
必须被强制转换为字符串(例如varchar
)。然后,trim
的结果必须被转换回numeric
。sg2wtvxw4#
另一种(可以说是更一致的)从
NUMERIC
字段中清除尾随零的方法是使用以下内容:请注意,您必须修改
FM
模式以匹配_column_
字段的最大预期precision
和scale
。有关FM
模式修饰符和/或to_char(..)
函数的更多详细信息,请参阅PostgreSQL文档这里和这里。编辑:另外,请参阅
gnumed-devel
邮件列表上的the following帖子,以获得有关此方法的更详细和更全面的解释。bd1hkmkf5#
小心这里的所有答案。虽然这看起来像一个简单的问题,但它不是。
如果你有pg 13或更高的,你应该使用trim_scale(关于这个已经有答案了)。如果没有,这是我的“Polyfill”:
下面是一个用于测试答案的查询:
好吧……看起来,我试图显示早期答案的缺陷,而只是不能拿出其他测试用例。也许你应该写更多,如果你可以。
我喜欢简短的语法,而不是花哨的SQL关键字,所以我总是使用::在
CAST
上使用逗号分隔的args函数调用,如trim(trailing '00' FROM _column_)
。但这只是个人口味,你应该检查你的公司或团队的标准(并争取改变他们XD)