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

4 mysql

列中有很多行有多个空格title,我想用一个空格替换它们。

update abc set title = REPLACE(title, "  ", " ");
Run Code Online (Sandbox Code Playgroud)

什么都没有被取代。

我正在使用 phpMyAdmin。

我注意到(单击Simulate query我的查询转换为的按钮:

update abc set title = REPLACE(title, " ", " ");
Run Code Online (Sandbox Code Playgroud)

所以用单个空格替换单个空格。

有什么帮助吗?

小智 8

在检查此页面时,我注意到要替换数据库中的所有双空格,您可能在单个记录上有三倍或更多空格。

某些解决方案没有考虑到的事情。因此您需要确保您的语句将它们全部替换。用单空格替换双空格一次或两次可能无法覆盖所有损坏的数据。

例如,记录值为'A B C'; 你能做的是:

  1. 首先用开/闭字符替换所有单个空格,例如<>,或[]{}...
  2. 然后用空值替换背靠背的逆序字符(关闭/打开),这样所有的or><都会被删除。][}{
  3. 最后一步是通过用单个空格替换剩余的打开/关闭字符来恢复单个空格,例如<>将更改回' '

我总是使用类似以下内容来修复我的数据:

UPDATE Table1 SET Column1 = REPLACE(REPLACE(REPLACE(Column1, ' ', '<>'), '><', ''),'<>',' ');
Run Code Online (Sandbox Code Playgroud)


Mad*_*iya 5

连续空格字符的数量可以是奇数或偶数。您可以用一个空格字符替换两个空格字符,并在修改后的字符串上再次执行类似的替换以涵盖所有奇数/偶数情况。

UPDATE abc SET title = REPLACE(REPLACE(title, '  ', ' '), '  ', ' ');
Run Code Online (Sandbox Code Playgroud)

解释:

  • 2 个空格:第一次替换将转换为 1 个空格。第二次替换不会进一步修改。
  • 3 个空格:首先替换将 (2+1) 个空格转换为 (1+1)。Second 将 (1+1 = 2) 个空格转换为 1 个空格。
  • 4 个空格:首先替换将 (2+2) 个空格转换为 (1+1)。Second 将 (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)
Run Code Online (Sandbox Code Playgroud)