title
列中有很多行带有多个空格,我想用一个空格替换它们。
update abc set title = REPLACE(title, " ", " ");
什么都不会代替。
我正在使用phpMyAdmin。
我注意到(单击按钮Simulate query
,我的查询被转换为:
update abc set title = REPLACE(title, " ", " ");
所以用单个空格替换单个空格。
有帮助吗?
答案 0 :(得分:1)
连续的空格字符数可以是奇数或偶数。您可以将两个空格字符替换为一个空格字符,然后再次对修改后的字符串进行类似的替换,以覆盖所有奇/偶情况。
UPDATE abc SET title = REPLACE(REPLACE(title, ' ', ' '), ' ', ' ');
说明:
以此类推...
演示:
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'
;您可以做的是:
<>
或[]
或{}
... ><
或][
或}{
。<>
将改回' '
我总是使用以下方法修复数据:
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, ' \+', ' ');