我的数据库中有超过 200000 条记录,其中包含客户姓名和信息。客户姓名在名字和姓氏之间有很大的空间。
ex. 1.ADAMS CRAIG
2. GABRIEL GEANETTE
3. KRANTZ AUDREY
我怎样才能消除两者之间的空间。喜欢
ex. 1.ADAMS CRAIG
2.GABRIEL GEANETTE
3.KRANTZ AUDREY
任何帮助将不胜感激。
谢谢你,
我的数据库中有超过 200000 条记录,其中包含客户姓名和信息。客户姓名在名字和姓氏之间有很大的空间。
ex. 1.ADAMS CRAIG
2. GABRIEL GEANETTE
3. KRANTZ AUDREY
我怎样才能消除两者之间的空间。喜欢
ex. 1.ADAMS CRAIG
2.GABRIEL GEANETTE
3.KRANTZ AUDREY
任何帮助将不胜感激。
谢谢你,
取自以下答案...并稍作修改以执行更新:
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
最后一次删除|
将处理偶数和奇数个空格。
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)
运行此查询几次,直到受影响的行变为 0。
UPDATE tbl
SET col = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, ' ', ' '), ' ', ' '), ' ', ' '), ' ', ' '), ' ', ' '))
WHERE col LIKE '% %'
将此查询转换为选择查询并进行测试。如果结果令人满意,请继续更新。
作为所选答案的替代方案,此语句将从列中删除连续空格字符的跨度,并用单个空格字符替换空格。这仅对空格字符起作用,不需要任何特殊的“标记”字符(并且不需要特殊的“标记”字符不在源列中出现。
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 '% %'
这可以通过更大范围的空格字符来扩展,以减少替换。替换从连续空格字符的最大跨度开始,然后替换逐渐变小,以尽可能有效地捕获所有出现的空格。(这不是最“有效”的算法,但它适用。)