mysql> select
-> dt.test_str,
-> REPLACE(REPLACE(dt.test_str, ' ', ' '), ' ', ' ') AS modified
-> FROM
-> (SELECT 'thi s is a weird string' AS test_str) AS dt ;
+--------------------------------+--------------------------+
| test_str | modified |
+--------------------------------+--------------------------+
| thi s is a weird string | thi s is a weird string |
+--------------------------------+--------------------------+
1 row in set (0.00 sec)
3条答案
按热度按时间b5buobof1#
在查看此页时,我注意到,要替换数据库中的所有双空格,单个记录上可能有三倍或更多的空格。
某个解决方案没有考虑到的事情。所以你需要确保你的语句将它们全部替换。用单个空间替换一次或两次双空间可能无法覆盖所有损坏的数据。
例如,将记录值作为
'A B C'
; 你能做的是:首先将所有单个空格替换为打开/关闭的字符,如
<>
,或[]
或者{}
...然后用空值替换背对背的逆序字符(closed/open),这样所有
><
或者][
或者}{
将被删除。最后一步是恢复单个空格,例如用单个空格替换剩余的打开/关闭字符
<>
将改回' '
我总是使用以下方法来修复数据:qnyhuwrf2#
您可以尝试这个select示例,其中使用regexp\u replace。也要确保它在工作:
已用regexp\u替换
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-替换
您也可以在update中使用regexp\u replace:
ki1q1bka3#
连续空格字符的数目可以是奇数或偶数。可以将两个空格字符替换为一个空格字符,然后对修改后的字符串再次执行类似的替换,以覆盖所有奇偶情况。
说明:
2个空格:第一个替换将转换为1个空格。第二次替换不会进一步修改。
3个空格:第一个替换将(2+1)空格转换为(1+1)。秒将(1+1=2)个空格转换为1个空格。
4个空格:第一个替换将(2+2)个空格转换为(1+1)。秒将(1+1=2)个空格转换为1个空格。
等等。。。
演示: