use*_*020 12 regex postgresql conditional case regexp-replace
我在Postgres 8.4 中有一个po_number类型列的表varchar.它存储带有一些特殊字符的字母数字值.我想忽略这些字符[/alpha/?/$/encoding/.]并检查列是否包含数字.如果它是一个数字,那么它需要作为数字进行类型转换,否则传递null,因为我的输出字段po_number_new是一个数字字段.
以下是示例:

我厌倦了这句话:
select
(case when regexp_replace(po_number,'[^\w],.-+\?/','') then po_number::numeric
else null
end) as po_number_new from test
Run Code Online (Sandbox Code Playgroud)
但是我为显式转换得到了一个错误:

Erw*_*ter 27
只是:
SELECT NULLIF(regexp_replace(po_number, '\D','','g'), '')::numeric AS result
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
\D是"不是数字"的班级简写.
并且您需要第4个参数'g'(用于"全局")来替换所有出现的事件.
手册中的详细信息.
但为什么Postgres 8.4?考虑升级到现代版本.
考虑过时版本的陷阱:
| 归档时间: |
|
| 查看次数: |
18009 次 |
| 最近记录: |