postgresql - 如何在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
?
解决方案
您甚至可以像这样将结果转换为数字:
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;
请注意,将数字存储为格式化文本是一个(非常)坏主意。请改用本机数字类型。
推荐阅读
- javascript - 使用 React App 在 Firestore 中切换布尔值
- java - SwingWorker - 在没有 Swing-Gui 的情况下的替代方案
- javascript - 编译后未定义 Webpack 自定义库
- reactjs - React agGrid - 使用 useEffect() 后函数停止工作
- sql - trunc(add_months(sysdate,3),'Q')-1 Postgres 中的等效表达式
- java - java.lang.ArrayIndexOutOfBoundsException - 用来自其他数组的循环数据填充新数组
- c++ - Visual Studio 2019 中的 IntelliSense 与 CMake 项目和 IAR 编译器
- ruby-on-rails - 在 Ruby 中将 DOCX 文件转换为 PDF 文件
- laravel - Laravel 关系(一对多)
- javascript - Sharepoint 和 Microsoft Teams 无法在 HTML 文件查看器中预览 HTML 文件