2
2
title : REGEXP_SUBSTR
3
3
---
4
4
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
+ ```
6
34
7
35
## 语法
8
36
@@ -12,13 +40,13 @@ REGEXP_SUBSTR(<expr>, <pat[, pos[, occurrence[, match_type]]]>)
12
40
13
41
## 参数
14
42
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() 中描述的相同。 |
22
50
23
51
## 返回类型
24
52
0 commit comments