sqlreplace函数⽤法_SQL中巧⽤Translate和Replace配合替换
字符串
常⽤SQL的朋友应该知道,SQL中⼀般都会提供⼀些字符串处理函数。如果要您把所有的字符串处理函数都摆出来,估计您⼼⾥就没底了。但如果我问您replace函数,您肯定⽤过,这是批量替换字符串的常⽤函数。
常见数据库⽀持的字符串处理函数
我先不卖关⼦了,下⾯把所有最新版本SQLServer⽀持的字符串函数都列出来,其中画红框的两个就是今天我要讲的,您看看先有个底。
SQLServer的字符串函数跟MySQL、PostgreSQL⽐起来,确实是太少了。
下图是MySQL⽀持的常⽤字符串函数,当然也有replace函数,⽤法与SQLServer⼤同⼩异,您可以参考⼀下:
下图是PostgreSQL⽀持的常⽤字符串处理函数,当然也有replace函数,⽤法与SQLServer和MySQL也是⼤同⼩异,⼀并贴出来供您参考下:
通过上⾯三图对⽐我们⼤概可以看出,不同数据库系统⽀持的字符串处理函数都差不多吧,⽐如都⽀持trim、replace、left、right、substring等等,还有⼀些可能名称不同,内涵和⽤法却都很相似。
真是搞不懂微软为何如此吝啬,这么有实⼒的IT巨头,数据库⽀持的函数却这么贫瘠。⼀些我们很需要的函数,总是姗姗来迟。⽐如像分割字符串的STRING_SPLIT、批量替换的TRANSLATE、去掉两头空格的TRIM等,晚⼀点就晚⼀点吧,总⽐没有强。
批量替换,看似简单的⼤问题
说批量替换问题是⼩问题,是因为我们总会到办法处理,配合循环和replace,总有办法解决,但有时候确实会很⿇烦,⽐如,请问您如何把字符串
12@3#4$56^78*9!/@#$^*
中的⾮数字字符替换掉?
确实不难对吧,⽐如写个循环把数字抓出来或者把⾮数字剔除,还⽐如⽤replace⼀个⼀个替换。循环抓取的我就不写了,有兴趣的朋友可以看看我之前的⽂章中有过这样的例⼦,我们下⾯尝试⽤replace来实现:
declare @str varchar(100);set @str='12@3#4$56^78*9!/@#$^*';set @str=replace(@str,'@',space(0));set @str=replace(@str,'#',space(0));set @str=replace(@str,运⾏结果参考下图:
结果是没错的,实现了,估计⼤部分朋友⾸先想到的就是这么写。但您觉得爽吗?如果⾮数字字符还有很多呢?
真的很不爽,虽然能实现,但确实很⿇烦。但如果⽤translate,就简单多了。下⾯我们就⽤神奇的Translate函数试试吧。TRANSLATE:另类的批量却能解决⼤问题
SQLServer中有⼀个translate函数,估计您未必熟悉,因这是2017版才推出的函数。有朋友会问,既然有了replace,为何还要多此⼀举
搞个translate出来呢?
其实translate与replace是⼤不相同的,我们先看看其语法定义:
TRANSLATE ( 字符串,待替换字符集,替换为字符集)字符串replace函数
眼尖的朋友应该能看出来,translate函数中,待替换的内容是字符集合,⽽不是单纯的字符串。还以上⾯的例⼦为例。
12@3#4$56^78*9!/@#$^*
这⾥⾯的⾮数字字符,有@#$^*!/七个,我们可以批量将7个特殊字符替换掉。脚本如下:
select translate(@str,'@#$^*!/',space(7));
怎么样,是不是很简单,第⼀个参数是待替换的字符串,第⼆个参数是需要被替换的所有字符,第三个参数是各⾃替换成对应位置的对应字
符。我们⼀起看看运⾏效果:
其中七个特殊字符,映射的是七个空格,稍显遗憾,中间的空格并没有被替换掉。这也是translate函数的⼀个要求,就是待替换字符个数
与替换为字符个数必须要⼀样多。剩余的空格我们结合replace,⼀次就搞定了,脚本如下:
select replace(translate(@str,'@#$^*!/',space(7)),space(1),space(0));怎么样,是不是很神奇?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。