mysql 替换字符串中的某个字符 替换某个位置的字符

时间:2024-04-15 22:04:44

背景:

今天遇到单据替换租户,深圳换到惠州,但惠州已经有单据存在,占用了单号。

单号逻辑是日期加4位数,例如:202401010001。深圳和惠州都有202401010001这条单据,若将深圳的部分单据换到惠州,出现主键重复报错。目前简单的方法是将日期后面的那一位换成9(所幸目前每日单据没有那么多)。

需求:将第9位的0,换成9。

方法:截取前面8位,截取后3位,中间拼个9。

sql:

-- 从第1位开始替换2个字符,换成s
insert('sz202404120001',1,2,'s') -- s202404120001

-- 根据不同的数据库来选择,有的数据库concat可以拼接多个,有的数据库concat只能拼接2个
concat(LEFT('202404120002' ,8),'9',right('202404120002',3))
-- 或者
concat(concat(LEFT('202404120002' ,8),'9'),right('202404120002',3))

函数 说明
CONCAT(s1,s2,...) 返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL。
CONCAT_WS(sx,s1,s2,...) 返回多个字符串拼接之后的字符串,每个字符串之间拼接上sx。
SUBSTRING(s,n,len)、MID(s,n,len) 两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串。
LEFT(s,n)、RIGHT(s,n) 前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符。
INSERT(s1,x,len,s2) 返回字符串s1。将字符串s1从位置x开始,替换掉len个字符,换成字符串s2。
REPLACE(s,s1,s2) 返回一个字符串,用字符串s2替代字符串s中所有的字符串s1。
LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) 三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)。
FIELD(s,s1,s2,...) 返回第一个与字符串s匹配的字符串的位置。

substring(s,pos) 和 locate(sx,s)有时候可以搭配一起使用。locate(sx,s)取到sx在s的位置,然后把这个值给到substring,即substring(s1,locate(sx,s)),从第几位开始截取,取到最后一位。

mysql:substr() 取出字符串中的某个特定位置的字符_where substr(dt, 1, 7) = substr(#dt#, 1, 7)-****博客

MySQL字符串的拼接、截取、替换、查找位置_mysql 字符串查找-****博客