我的数据库中有超过200000条记录,包含客户名称和信息。 客户名称在名字和姓氏之间有很大的空间。
ex. 1.ADAMS CRAIG
2. GABRIEL GEANETTE
3. KRANTZ AUDREY
如何删除其间的空格。像
ex. 1.ADAMS CRAIG
2.GABRIEL GEANETTE
3.KRANTZ AUDREY
任何帮助都会受到赞赏。
谢谢,
答案 0 :(得分:4)
Taken from the following answer ...并略微修改以执行更新:
UPDATE YourTable
SET Name =
replace(
replace(
replace(
LTrim(RTrim(Name)), --Trim the field
' ',' |'), --Mark double spaces
'| ',''), --Delete double spaces offset by 1
'|','') --Tidy up
WHERE Name LIKE '% %'
所以在你的例子中......
ADAMS CRAIG
会变成......
ADAMS | | | | CRAIG
一旦删除了特殊的|
令牌,就会变成......
ADAMS CRAIG
最后一次移除|
将处理奇数个空格。
答案 1 :(得分:1)
运行此查询几次,直到受影响的行变为0。
UPDATE tbl
SET col = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, ' ', ' '), ' ', ' '), ' ', ' '), ' ', ' '), ' ', ' '))
WHERE col LIKE '% %'
将此查询转换为选择查询和测试。如果结果令人满意,请继续进行更新。
答案 2 :(得分:1)
mysql> select name from tmp;
+------------------------+
| name |
+------------------------+
| ADAMS CRAIG |
| GABRIEL GEANETTE |
| KRANTZ AUDREY |
+------------------------+
3 rows in set (0.00 sec)
mysql> select concat(substr(name,1,locate(' ',name)), trim(substr(name,locate(' ', name)))) from tmp;
+-------------------------------------------------------------------------------+
| concat(substr(name,1,locate(' ',name)), trim(substr(name,locate(' ', name)))) |
+-------------------------------------------------------------------------------+
| ADAMS CRAIG |
| GABRIEL GEANETTE |
| KRANTZ AUDREY |
+-------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
答案 3 :(得分:0)
作为所选答案的替代方法,此语句将从列中删除连续空格字符的跨度,并用单个空格字符替换空格。这仅对空格字符起作用,并且不需要任何特殊的“标记”字符(并且不要求特殊的“标记”字符不出现在源列中。
UPDATE mytable
SET mycol =
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
mycol
,SPACE(21),' ')
,SPACE(13),' ')
,SPACE(8),' ')
,SPACE(5),' ')
,SPACE(3),' ')
,SPACE(2),' ')
WHERE mycol LIKE '% %'
要将此表达式作为测试运行,请在SELECT语句中使用它:
SELECT REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
mycol
,SPACE(21),' ')
,SPACE(13),' ')
,SPACE(8),' ')
,SPACE(5),' ')
,SPACE(3),' ')
,SPACE(2),' ') AS new_mycol
FROM mytable t
WHERE t.mycol LIKE '% %'
这可以通过更大的SPACE字符范围进行扩展,以减少替换次数。替换从最大的连续空间字符跨度开始,然后替换逐渐变小,以尽可能有效地捕获所有空间的出现。 (这不是最“有效”的算法,但它适用。)