sql中截取字符串

哎哟,这个SQL截取字符串替换字符的操作,其实挺简单的。
我之前在问答论坛上就碰到过不少类似的提问。
咱们就来说说这事儿。

首先,你得定位特定字符的位置。
这得用到INSTR函数,它告诉你某个字符在字符串里第一次出现的位置。
比如说,你要找'2 01 2 1 1 9 8 '这个字符串里的第7 个字符,INSTR就返回7
然后,你截取从那个位置开始的字符串。
这个活儿得靠SUBSTR来干。
你给SUBSTR加上那个位置加1 ,比如说SUBSTR('2 01 2 1 1 9 8 ',7 ,1 ),这样就截取从第8 个字符开始的,也就是'1 '。

接下来,得把截取出来的字符替换掉。
这回要用REPLACE函数。
你把截取出来的字符替换成空字符串,比如REPLACE('1 ','1 ',''),结果就是空字符串了。

最后,把这个操作应用到实际的表字段上。
比如你有个表叫your_table,字段名是archiveID。
那么你的SQL语句就得是:
sql SELECT REPLACE(SUBSTR('archiveID_value', INSTR('archiveID_value', '特定字符') + 1 ), '特定字符', '') AS modified_string FROM your_table;
这条语句会从archiveID字段的每个值中找到'特定字符'的位置,截取那个位置之后的所有字符,然后把'特定字符'替换成空字符串。

注意哈,INSTR函数里那个第四个参数是查找第几个匹配项,这里1 表示第一个匹配项。
SUBSTR从指定的起始位置开始截取,REPLACE则是替换字符。

说实话,我当时也没想明白这其中的逻辑,不过现在一看,还是挺简单的。
反正现在论坛上关于这类的SQL问题,用这个方法一般都能解决。

sql 语句中如何将字符串某位值替换,例如1111111111111,将其中3-5位的1换为2,即输出1122211111111

欸?你跟我说STUFF()函数啊?这玩意儿我确实用过几次,特别是处理一些字符串乱码或者需要修改固定位置字符的时候。

记得去年在杭州搞那个项目,有个表里的地址字段line1 老是中间多几个乱码字符,每次都得手动删。
后来我就用了STUFF(),代码写得贼简单。
就是直接用STUFF(line1 , 3 , 5 , '2 2 2 '),把第3 位开始的5 个字符换成'2 2 2 '。
当时跑了一下,秒秒钟搞定,那些乱码全没了。
结果特别直观,就是那个地址从'杭州市西湖区XXX'变成了'杭州市2 2 西湖区XXX',中间正好删了5 个字符。

不过你说的那个负值问题我也踩过坑。
有次写查询的时候,脑子一热,想着用负数定位,结果整了个NULL出来,当时真是想砸键盘。
所以你提醒得对,用STUFF()的时候,开始位置和长度必须正数,别瞎整。

这函数吧,我觉得挺实用的,特别是那种需要精确定位修改的场景。
比如有些老系统数据导入新系统,字段长度对不上,用STUFF()调整一下就完事儿。
当然,具体怎么用,还得看你那个场景怎么需求。
反正你看着办吧。