语法
regexp_replace(source_char,pattern[,replace_string[,position[,occurren
ce[match_option]]]])
说明
用replace_string 指定的字符串替换源字符串中与pattern 指定的正则
表达式相匹配的字符串。
功能
将匹配获得的字符串替换成指定的字符串。
参数说明
表5- 15 参数说明
参数
说明
source_char
源字符串。该参数支持的数据类型与8a 的replace 函数的src 参
数一致。
pattern
正则表达式。
每个正则表达式最多可包含512 个字节。
具体语法
规则请参考PCRE-7.8 版本的语法规则说明
replace_string
替换字符串。替换字符串可以包含反向引用的数字表达式(\n,
n 的取值范围是[1,9])
position
开始匹配的位置,如果不指定默认为1,即从source_char 的第
一个字符开始匹配。position 为一个正整数。
occurrence
正则匹配的序数。是一个非负的整数,默认值为0。
指定为0,则替换所有匹配到的字符串;
如果指定为整数n,则替换第n 次匹配到的字符串;
match_parameter
可通过设置该参数改变默认的匹配功能行为。默认情况下“.”不
匹配换行符,源字符串被看作一行。参数可选项如下:
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
739
参数
说明
i:大小写不敏感;
c:大小写敏感;
n:点号(.)不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
注意
用户同时指定多个互斥参数可选项时,系统按照最后一个参数处理。用户
指定match_parameter 参数选项(i,c,n,m,x)以外的选项时,系统报错。
regexp_replace 函数的replace_string、
position、
occurrence、
match_parameter
参数都能省略,若上述4 个参数中的任何一个省略,省略参数后的所有参
数都不能设置,若需要设置后续参数则必须给出所设置参数的上一个参数
的值。
由于sql 语法与pcre 正则语法都使用反斜杠
('\')
作为转义符。
所以在pattern
中应使用连续两个反斜杠(‘\\')作为正则的转义符。
regexp_replace 函数不支持递归。
如果source_char 参数为运算结果而非表的实体列,且此运算结果大于512
个字节,则函数报错。
例如:
CREATE VIEW v_tb1 as SELECT * FROM tb1 WHERE v1 = (select
regexp_replace('000*111*999','\\*','-') from tb2 where
v2=regexp_replace(c1,'\\*','-'));
SELECT * from alltype A left join (SELECT regexp_replace(v1, 'a', '')
as c41 from v_tb1)
B on A.V3 =
regexp_replace(B.c41,'\\*','-') ;
示例
示例1:在简单select 查询中使用函数。
gbase> drop table if exists tb1;
Query OK, 0 rows affected
gbase> drop table if exists tb2;
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
740
Query OK, 0 rows affected
gbase> create table tb1(v1 varchar(25),c1 char(11),i1 int);
Query OK, 0 rows affected
gbase> insert into tb1 values('000-111-999','000*111*999',12);
Query OK, 1 row affected
gbase> create table tb2(v2 varchar(25),c2 char(11),i2 int);
Query OK, 0 rows affected
gbase> insert into tb2 values('000-111-999','000*111*999',12);
Query OK, 1 row affected
gbase> SELECT regexp_replace('000-111-999','-','') from tb1;
+--------------------------------------+
| regexp_replace('000-111-999','-','') |
+--------------------------------------+
| 000111999
|
+--------------------------------------+
1 row in set