GBASE regexp_replace函数 与 db2 translate函数比较

db2 translate函数

以下内容参考自文档:
translate 函数
官方示例:

示例1:

fn:translate('Test literal','el','om')
-- RETURN RESULT: Tost mitoram

上述式子的意思为:
对于字符串:‘Test literal’,使用o 替代 e,使用 m替代 l

示例2:

fn:translate('Another test literal', 'Ater', 'Bfim')

函数返回在字符串文字“Another test literal”中进行以下替换后生成的字符串:A 替换为 B,t 替换为 f,e 替换为 i 并且 r 替换为 m。

当要替换的字符串 以及 用来替换的字符串不等长的时候,会自动忽略:

示例3:

SELECT TRANSLATE('123405060708  9ASGHKBJNJ4562113','*+',
' 0123456789') FROM SYSIBM.DUAL 

函数将用*替代空格,使用+替代0,对前面的字符串进行替换,而对于其他的数字(123456789)则也会使用空格进行替换,
因此替换后的结果为:

'    + + + + ** ASGHKBJNJ       '

示例4:

SELECT TRANSLATE('123456579SGIAIJNJKNJIN','*-+#$%^&*','3235') FROM SYSIBM.DUAL 

当用来替换的字符串长于要被替换的字符串,并且存在一对多的情况时,按照顺序进行匹配。
上式:
使用*替换数字3,使用-替换数字2,使用#替换数字5
结果:

'1-*4#6#79SGIAIJNJKNJIN'

一般TRANSLATE可以与TRIM()/LENGTH()函数联用,也可以隐藏一些信息,可以检查字符串是否含有某个字符(类似于正则的功能)

比如对手机号进行隐藏处置:

SELECT TARNSLATE('15923456789','*********','023456789') from SYSOBM.DUAL
RESULT RETURNED: '1**********'

结合TRIM()/LENGTH()函数使用:

SELECT LENGTH(TRIM(TRANSLATE(FIELD,'*',' 0123456789'))) FROM TABLE_NAME 

如果是数字的话,那么会被替换掉,如果存在空格的话,会变成*,用上述语句判断,该字段是否全部由数字组成,如果是的话,那么表达式应当为0

GBASE regexp_replace函数

在GBASE中能够实现类似功能的函数有regexp_replace
文章参考:
GBase 8a 模糊查询和正则函数regexp_replace、regexp_like
示例1:

select regexp_replace('First','st','AB');
-- RESULT RETURNED: 'FirAB' 

除了智齿字符串替换之外,regexp_replace还支持正则替换。
示例2:

select regexp_replace('我的电话13812345678。','13[6-9][0-9]{8}','***********');
-- RESULT RETURNED:我的电话***********。

上述式子也可以写作:

select regexp_replace('我的电话13812345678。','[0-9]','*');
-- RESULT RETURNED:我的电话***********。

因为’[0-9]'已经可以匹配所有的数字了。

SELECT LENGTH(TRIM(TRANSLATE(FIELD,'*',' 0123456789'))) FROM TABLE_NAME 

使用 regexp_replace改写为:
我们希望将所有的数字都替换为空,再去除空格,看看最后的式子的长度是不是等于0,如果等于0的话,我们可以判断,整个式子都是由数字构成的

SELECT LENGTH(TRIM(regexp_replace(FIELD,'[0-9]',' '))) FROM TABLE_NAME 

其他用法:
指定起始位置匹配、指定匹配出现的序数、额外参数忽略大小写参考regexp_replace()。

PS:
函数语法:

regexp_replace(source_char,pattern[,replace_string[,position[,occurren
ce[match_option]]]])

说明:

  • 用 replace_string 指定的字符串替换源字符串中与 pattern 指定的正则表达式相匹配的字符串。
  • 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 可通过设置该参数改变默认的匹配功能行为。默认情况下“.”不匹配换行符,源字符串被看作一行。参数可选项如下:
    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个字节,则函数报错。
  • 当前版本不支持group捕获后的替换。

你可能感兴趣的:(数据库,sql)