首页 > 解决方案 > 在 postgresql 中解析字符串

问题描述

假设我有数据类型为 varchar 的列,该列包含类似于这些的值

'My unique id [john3 UID=123]'
'My unique id [henry2 UID=1234]'
'My unique id [tom2 UID=56]'
'My unique id [jerry25 UID=98765]'

如何UID=使用 postgresql 仅获取字符串中的数字。例如,在'My unique id [john3 UID=123]'我想要的字符串123中,同样在'My unique id [jerry25 UID=98765]'我想要的字符串98765 中 PostgreSQL 中有没有办法做到这一点?

标签: sqlstringpostgresqlparsing

解决方案


我们可以REGEXP_REPLACE在这里使用:

SELECT col, REGEXP_REPLACE(col, '.*\[\w+ UID=(\d+)\].*$', '\1') AS uid
FROM yourTable;

演示

编辑:

如果给定的值可能与上述模式不匹配,在这种情况下您希望返回整个原始值,我们可以使用CASE表达式:

SELECT col,
       CASE WHEN col LIKE '%[%UID=%]%'
            THEN REGEXP_REPLACE(col, '.*\[\w+ UID=(\d+)\].*$', '\1')
            ELSE col END AS uid
FROM yourTable;

推荐阅读