REGEXP_SUBSTR
功能概述
返回字符串中与正则表达式匹配的子串,可以指定从第几个字符开始搜索、取第几次匹配。没有匹配时返回 NULL。
和 REGEXP_EXTRACT 的区别:
REGEXP_EXTRACT 按分组(group)提取,适合从固定格式中取某一段;REGEXP_SUBSTR 总是返回整个匹配,并支持按出现次数取第 N 个匹配,适合从文本中依次取出多个同类片段(如第 2 个数字)。需要一次取出全部匹配时用 REGEXP_EXTRACT_ALL。
语法
参数说明
-
:STRING 类型,被搜索的字符串。<str> -
:STRING 类型,正则表达式。为空字符串时返回 NULL。正则语法见正则表达式。<pattern> -
:可选,BIGINT 类型,从第几个字符开始搜索,默认为 1。按字符计数,超过字符串长度时返回 NULL。<position> -
:可选,BIGINT 类型,返回第几次匹配,默认为 1。匹配次数不足时返回 NULL。<occurrence>
任一参数为 NULL 时返回 NULL。
使用示例
取第一个、第二个数字,以及从第 10 个字符开始的第一个数字:
| first_num | second_num | from_pos_10 | third_num |
|---|---|---|---|
| 123 | 456 | 456 | NULL |
:第 10 个字符是from_pos_10
的-item-456
,之后的第一个数字是-
。456
:字符串中只有两段数字,第 3 次匹配不存在,返回 NULL。third_num
从日志中提取 IP 地址:
| log | ip |
|---|---|
| login ok from 10.0.0.12 at 08:00 | 10.0.0.12 |
| login failed from 192.168.1.7 | 192.168.1.7 |
| no ip here | NULL |
注意事项
- 返回整个匹配内容,正则中的分组不影响结果。需要按分组提取时用
。REGEXP_EXTRACT - 匹配到空串时返回 NULL。
- SQL 字符串中的反斜杠需要转义,
写作\d
。'\\d'
相关文档
联系我们
