从 PostgreSQL 中的字段中提取数字
问题:从 PostgreSQL 中的字段中提取数字 我在 Postgres 8.4 中有一个表,其中列po_number类型为varchar。它存储带有一些特殊字符的字母数字值。我想忽略字符[/alpha/?/$/encoding/.]并检查该列是否包含数字。如果它是一个数字,那么它需要类型转换为数字或传递 null,因为我的输出字段po_number_new是一个数字字段。 下面是示例: SQL
·
问题:从 PostgreSQL 中的字段中提取数字
我在 Postgres 8.4 中有一个表,其中列po_number
类型为varchar
。它存储带有一些特殊字符的字母数字值。我想忽略字符[/alpha/?/$/encoding/.]
并检查该列是否包含数字。如果它是一个数字,那么它需要类型转换为数字或传递 null,因为我的输出字段po_number_new
是一个数字字段。
下面是示例:
SQL 小提琴。
我厌倦了这句话:
select
(case when regexp_replace(po_number,'[^\w],.-+\?/','') then po_number::numeric
else null
end) as po_number_new from test
但是我得到了显式转换的错误:
解答
简单地:
SELECT NULLIF(regexp_replace(po_number, '\D','','g'), '')::numeric AS result
FROM tbl;
\D
是“不是数字”的类简写。
您需要第四个参数'g'
(用于“全局”)来替换 all 出现。
手册中有详细说明。
对于要替换的已知的有限字符集,普通的字符串操作函数(如replace()
或translate()
)要便宜得多。正则表达式更加通用,在这种情况下,我们希望消除所有 but 数字。有关的:
-
正则表达式删除字符串中所有出现的多个字符
-
PostgreSQL SELECT 一行中只有字母字符
-
是否有 regexp_replace 等效于 postgresql 7.4?
但为什么是 Postgres 8.4?考虑升级到现代版本。
考虑过时版本的陷阱:
-
将 varchar 字符串排序为数字
-
警告:在字符串文字中非标准使用转义
更多推荐
目录
所有评论(0)