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

时间:2018-10-25 14:55:50

标签: mysql

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

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

什么都不会代替。

我正在使用phpMyAdmin。

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

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

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

有帮助吗?

3 个答案:

答案 0 :(得分:1)

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

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

说明:

  • 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)

答案 1 :(得分:1)

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

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

例如,记录值为'A B C';您可以做的是:

  1. 首先用开/关字符替换所有单个空格 例如<>[]{} ...
  2. 然后替换背对背颠倒顺序的字符(关闭/打开) 的值为空,因此将删除所有><][}{
  3. 最后一步是通过替换剩余的打开/关闭来恢复单个空格 具有单个空格的字符,例如<>将改回' '

我总是使用以下方法修复数据:

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

答案 2 :(得分:0)

您可以尝试使用REGEXP_REPLACE的SELECT示例。肯定也能奏效:

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_REPLACE
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace

您也可以在更新中使用REGEXP_REPLACE:

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