sql - 在 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 中有没有办法做到这一点?
解决方案
我们可以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;
推荐阅读
- java - Eureka 客户端重新注册需要时间
- javascript - 在 jQuery 中,是否可以存储通配符以便在函数中进一步使用?
- javascript - 如何通过光标后的元素触发悬停事件
- android - Android 实时开发者通知
- java - 带钥匙斗篷的安全弹簧靴不会返回 403
- c# - 如何在 Winforms 中保存用户名?
- xslt - XSLT 1.0 将非字母数字字符后的每个字母大写
- python - OpenCV Python中旋转矩形中的角顺序
- javascript - 如何从 then() 块中返回函数?
- javascript - 来自 Tracker 重新计算函数的异常:ReferenceError: $el is not defined