是否可以使用替换函数替换部分空格分隔的字符串?
e.g。如果我有以下字符串' 123456 456 789'并希望取代第二次出现的'''使用' XXXXX'。
我尝试过使用以下内容:
UPDATE table
set column = REPLACE(column,'456','xxxxx')
Where.......
问题在于它将取代第一次出现的'''同样。我无法将替换语句中的模式更改为' 456'作为'''''可能出现在单元格的开头或结尾。有人有想法吗?
答案 0 :(得分:0)
使用REGEXP_REPLACE
执行此操作:
set column = REGEXP_REPLACE(column,'[[:<:]]456[[:>:]]','xxxxx')
正则表达式语法添加单词分隔符[[:<:]]
和[[:>:]]
(匹配字符串的开头和结尾以及正则表达式单词 \w
和“不是单词”之间\W
)。
NB :正则表达式在语法和逻辑上都是正确的,但上面的代码未经测试
答案 1 :(得分:0)
使用MySQL REPLACE,SUBSTR或LOCATE
REPLACE('123456 456 789',
SUBSTR('123456 456 789',
LOCATE(' ','123456 456 789'),
LOCATE(' ','123456 456 789',
LOCATE(' ','123456 456 789')+1)-LOCATE(' ','123456 456 789')),' xxxxx')
答案 2 :(得分:0)
您可以尝试:
CONCAT_WS(' ',
SUBSTRING_INDEX( '123456 456 789', ' ', 1),
'xxxx',
SUBSTRING_INDEX( '123456 456 789', ' ', -1))
与MySql参考手册中一样:
SUBSTRING_INDEX在指定之前返回字符串中的子字符串 分隔符的出现次数
看看here
如果使用否定索引,则从字符串的末尾开始
CONCAT_WS返回与分隔符的连接。所以:
'123456'+''+'xxxx'+''+'789'
如果你想测试一下:
SELECT CONCAT_WS(' ',
SUBSTRING_INDEX( '123456 456 789', ' ', 1),
'xxxx',
SUBSTRING_INDEX( '123456 456 789', ' ', -1));
SELECT SUBSTRING_INDEX( '123456 456 789', ' ', 1);
SELECT SUBSTRING_INDEX( '123456 456 789', ' ', -1);