首页 > 解决方案 > 如何在postgresql的列中的所有行上应用翻译函数

问题描述

在我拥有的数据集中,有一列包含数字,如83.420, 43.317, 149.317, ... 并且这些列存储为字符串。数字中的点不代表小数点,即数字83.420基本上是83420等。从该列中的数字中删除该点的一种方法是使用TRANSLATE如下函数:

SELECT translate('83.420', '.', '')

返回83420。但是我怎样才能在数据集中的所有行上应用这个函数呢?我试过这个,但是,我失败了:

SELECT translate(SELECT num_column FROM my_table, '.', '')

我面临错误SQL Error [42601]: ERROR: syntax error at end of input。知道如何将翻译功能完全应用于数据中的一列吗?或任何更好的想法来使用而不是translate

标签: postgresqltranslate

解决方案


您甚至可以像这样将结果转换为数字:

SELECT translate(num_column, '.', '')::integer from the_table;
-- average:
SELECT avg(translate(num_column, '.', '')::integer from the_table;

或使用replace

SELECT replace(num_column, '.', '')::integer from the_table;
-- average:
SELECT avg(replace(num_column, '.', '')::integer) from the_table;

请注意,将数字存储为格式化文本是一个(非常)坏主意。请改用本机数字类型。


推荐阅读