22title : REGEXP_SUBSTR
33---
44
5- 返回字符串 ` expr ` 中与正则表达式 ` pat ` 匹配的子字符串,如果没有匹配则返回 NULL。如果 ` expr ` 或 ` pat ` 为 NULL,则返回值为 NULL。
5+ 返回字符串 ` expr ` 中与正则表达式模式 ` pat ` 匹配的子串,若无匹配则返回 NULL。若 expr 或 pat 为 NULL,返回值也为 NULL。
6+
7+ - REGEXP_SUBSTR 不支持提取捕获组(由括号 ` () ` 定义的子模式)。它返回整个匹配的子串而非特定的捕获组。
8+
9+ ``` sql
10+ SELECT REGEXP_SUBSTR(' abc123' , ' (\w +)(\d +)' );
11+ -- 返回 'abc123'(整个匹配项),而非 'abc' 或 '123'。
12+
13+ -- 替代方案:使用 SUBSTRING 和 REGEXP_INSTR 等字符串函数手动提取所需部分:
14+ SELECT SUBSTRING (' abc123' , 1 , REGEXP_INSTR(' abc123' , ' \d +' ) - 1 );
15+ -- 返回 'abc'(提取数字前的部分)。
16+ SELECT SUBSTRING (' abc123' , REGEXP_INSTR(' abc123' , ' \d +' ));
17+ -- 返回 '123'(提取数字部分)。
18+ ```
19+
20+ - REGEXP_SUBSTR 不支持 ` e ` 参数(Snowflake 中用于提取捕获组)或 ` group_num ` 参数来指定返回哪个捕获组。
21+
22+ ``` sql
23+ SELECT REGEXP_SUBSTR(' abc123' , ' (\w +)(\d +)' , 1 , 1 , ' e' , 1 );
24+ -- 错误:Databend 不支持 'e' 参数或捕获组提取。
25+
26+ -- 替代方案:使用 SUBSTRING 和 LOCATE 等字符串函数手动提取所需子串,或在查询前通过外部工具(如 Python)预处理数据以提取捕获组。
27+ SELECT SUBSTRING (
28+ REGEXP_SUBSTR(' letters:abc,numbers:123' , ' letters:[a-z]+,numbers:[0-9]+' ),
29+ LOCATE(' letters:' , ' letters:abc,numbers:123' ) + 8 ,
30+ LOCATE(' ,' , ' letters:abc,numbers:123' ) - (LOCATE(' letters:' , ' letters:abc,numbers:123' ) + 8 )
31+ );
32+ -- 返回 'abc'
33+ ```
634
735## 语法
836
@@ -12,13 +40,13 @@ REGEXP_SUBSTR(<expr>, <pat[, pos[, occurrence[, match_type]]]>)
1240
1341## 参数
1442
15- | 参数 | 描述 |
16- | ------------| -------- ---------------------------------------------------------------------------------------------------|
17- | expr | 要匹配的字符串表达式 |
18- | pat | 正则表达式 |
19- | pos | 可选。在 ` expr ` 中开始搜索的位置。如果省略,默认值为 1。 |
20- | occurrence | 可选。要搜索的匹配项的出现次数。如果省略,默认值为 1。 |
21- | match_type | 可选。指定如何执行匹配的字符串。 其含义与 REGEXP_LIKE() 中的描述相同。 |
43+ | 参数 | 描述 |
44+ | ------------- | ---------------------------------------------------------------------------------------------------|
45+ | expr | 要匹配的字符串表达式 |
46+ | pat | 正则表达式 |
47+ | pos | 可选。在 expr 中开始搜索的位置。若省略,默认为 1。 |
48+ | occurrence | 可选。要搜索的第几次匹配。若省略,默认为 1。 |
49+ | match_type | 可选。指定匹配方式的字符串, 其含义与 REGEXP_LIKE() 中描述的相同。 |
2250
2351## 返回类型
2452
0 commit comments