以下内容参考自文档:
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 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]]]])
说明: