用列中的单个空间替换多个空间

cld4siwp  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(370)

列中有许多行有多个空格 title 我想用一个空格来代替它们。

update abc set title = REPLACE(title, "  ", " ");

什么都不换。
我用的是phpmyadmin。
我注意到(点击按钮 Simulate query 我的查询转换为:

update abc set title = REPLACE(title, " ", " ");

所以用单空间代替单空间。
有什么帮助吗?

b5buobof

b5buobof1#

在查看此页时,我注意到,要替换数据库中的所有双空格,单个记录上可能有三倍或更多的空格。
某个解决方案没有考虑到的事情。所以你需要确保你的语句将它们全部替换。用单个空间替换一次或两次双空间可能无法覆盖所有损坏的数据。
例如,将记录值作为 'A B C' ; 你能做的是:
首先将所有单个空格替换为打开/关闭的字符,如 <> ,或 [] 或者 {} ...
然后用空值替换背对背的逆序字符(closed/open),这样所有 >< 或者 ][ 或者 }{ 将被删除。
最后一步是恢复单个空格,例如用单个空格替换剩余的打开/关闭字符 <> 将改回 ' ' 我总是使用以下方法来修复数据:

UPDATE Table1 SET Column1 = REPLACE(REPLACE(REPLACE(Column1, ' ', '<>'), '><', ''),'<>',' ');
qnyhuwrf

qnyhuwrf2#

您可以尝试这个select示例,其中使用regexp\u replace。也要确保它在工作:

SELECT 'ab  asd   asd a qeqw q    qwe   qweqw qw' AS `text 1`, REGEXP_REPLACE('ab  asd   asd a qeqw q    qwe   qweqw qw', ' \+', ' ') AS `text 2`;

已用regexp\u替换
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-替换
您也可以在update中使用regexp\u replace:

update abc set title = REGEXP_REPLACE(title, ' \+', ' ');
ki1q1bka

ki1q1bka3#

连续空格字符的数目可以是奇数或偶数。可以将两个空格字符替换为一个空格字符,然后对修改后的字符串再次执行类似的替换,以覆盖所有奇偶情况。

UPDATE abc SET title = REPLACE(REPLACE(title, '  ', ' '), '  ', ' ');

说明:
2个空格:第一个替换将转换为1个空格。第二次替换不会进一步修改。
3个空格:第一个替换将(2+1)空格转换为(1+1)。秒将(1+1=2)个空格转换为1个空格。
4个空格:第一个替换将(2+2)个空格转换为(1+1)。秒将(1+1=2)个空格转换为1个空格。
等等。。。
演示:

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)

相关问题