在Postgres 8.4中,我有一个表格,其第po_number列的类型为varchar.它存储带有一些特殊字符的字母数字值.我想忽略字符[/alpha/?/$/encoding/.],判断列是否包含数字.如果它是一个数字,那么它需要类型转换为数字,或者传递null,因为我的输出字段po_number_new是一个数字字段.

下面是一个例子:

示例

SQL Fiddle.

我厌倦了这种说法:

select 
(case when  regexp_replace(po_number,'[^\w],.-+\?/','') then po_number::numeric
else null
end) as po_number_new from test

但我在显式转换中遇到了一个错误:

error

推荐答案

简单地说:

SELECT NULLIF(regexp_replace(po_number, '\D','','g'), '')::numeric AS result
FROM   tbl;

\D being the class shorthand for "not a digit".
And you need the 4th parameter 'g' (for "globally") to replace all occurrences.
Details in the manual.

对于已知的有限字符集来说,普通string manipulation functions like replace() or translate()要便宜得多.正则表达式的用途更广泛,我们希望在本例中消除所有but位数字.相关的:

但为什么要考8.4级?Consider upgrading to a modern version.

考虑过时版本的trap :

Postgresql相关问答推荐

如何获取实例化视图的列级权限?

使用PGx在围棋中执行多条SQL语句

可以向判断枚举值的SQL列添加约束吗?

为什么在使用PostGIS时,英国郡的几何图形会出现在几内亚湾?

为什么Postgres在打印时能完全缩短时间跨度?

PostgreSQL 不删除旧的 WAL 档案

使用Helm设置PostgreSQL配置

从单选插入到多个表

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

消除 PostgreSQL SELECT 语句中的重复行

Postgres中的GROUP BY - JSON数据类型不相等?

在psql中,为什么有些命令没有效果?

在 postgres 中删除所有共享相同前缀的表

在 Spring Boot 上使用 Hibernate 映射 PostGIS 几何点字段

将 Windows 上的 .sql 文件导入到 postgresql

在 PGAdmin 中搜索所有功能的文本

pg_restore 会覆盖现有的表吗?

防止 PostgreSQL 中的递归触发器

如何使用 postgresql 按计数排序?

如何为 Postgresql 中的所有数据库创建具有只读权限的用户?