PostgreSQL中如何提取varchar类型字段字符串里UID=后的数字
PostgreSQL可以通过内置的正则匹配功能实现该需求,具体方案如下:
方法1:使用 substring() 配合正则捕获(最简洁)
substring 函数支持直接提取正则捕获组的内容,只需匹配 UID= 后的连续数字即可:
-- 单值测试示例 SELECT substring('My unique id [john3 UID=123]' FROM 'UID=(\d+)') AS extracted_uid;
上述语句执行后返回结果为 123,完全符合需求。
实际查询表数据的语法:
SELECT substring(你的字段名 FROM 'UID=(\d+)') AS uid FROM 你的表名;
方法2:使用 regexp_match() 函数
如果需要处理更复杂的匹配场景,可以用 regexp_match 函数,它会返回匹配到的捕获组数组,取第一个元素即可:
-- 单值测试示例 SELECT (regexp_match('My unique id [jerry25 UID=98765]', 'UID=(\d+)'))[1] AS extracted_uid;
扩展用法
- 提取结果转为数值类型:如果需要直接得到数字类型的结果,追加类型强转即可
SELECT substring(你的字段名 FROM 'UID=(\d+)')::INTEGER AS uid FROM 你的表名;
- 过滤无UID的行:如果需要排除不存在
UID=的记录,追加WHERE条件即可
SELECT substring(你的字段名 FROM 'UID=(\d+)')::INTEGER AS uid FROM 你的表名 WHERE 你的字段名 ~ 'UID=\d+';
正则说明:
UID=(\d+)中,\d+表示匹配1个及以上的数字,括号包裹的部分为捕获组,函数会直接返回捕获组内的内容。
内容的提问来源于stack exchange,提问作者kannappan
相关产品推荐
相关产品推荐

