3

我的数据库中有超过 200000 条记录,其中包含客户姓名和信息。客户姓名在名字和姓氏之间有很大的空间。

ex.  1.ADAMS         CRAIG
     2. GABRIEL       GEANETTE
     3. KRANTZ        AUDREY

我怎样才能消除两者之间的空间。喜欢

ex.  1.ADAMS CRAIG
     2.GABRIEL GEANETTE
     3.KRANTZ AUDREY

任何帮助将不胜感激。

谢谢你,

4

4 回答 4

4

取自以下答案...并稍作修改以执行更新:

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

最后一次删除|将处理偶数和奇数个空格。

于 2012-12-19T19:39:16.233 回答
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)
于 2012-12-19T19:45:56.647 回答
1

运行此查询几次,直到受影响的行变为 0。

UPDATE tbl
SET    col = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '  ', ' '), '  ', ' '), '  ', ' '), '  ', ' '), '  ', ' '))
WHERE  col LIKE '%  %'

将此查询转换为选择查询并进行测试。如果结果令人满意,请继续更新。

于 2012-12-19T19:36:54.560 回答
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 '%  %'

这可以通过更大范围的空格字符来扩展,以减少替换。替换从连续空格字符的最大跨度开始,然后替换逐渐变小,以尽可能有效地捕获所有出现的空格。(这不是最“有效”的算法,但它适用。)

于 2012-12-19T20:27:47.203 回答