MySQL Query,删除所有空格

时间:2011-01-24 12:29:20

标签: mysql

我有一个不寻常的查询,这让我现在卡住了

表格字段为:

id    bigint  20
name  varchar 255
desc  text

有许多记录具有相同的名称和desc,但是desc在单词之间有一些额外的空格

喜欢

1   't1'   'hello world'
2   't2'   'hello                world'

我需要找到那些具有类似数据的行

我怎样才能找到这些,谢谢。

2 个答案:

答案 0 :(得分:2)

这非常接近。假设:

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| d     | text    | YES  |     | NULL    |       |
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

然后这个查询:

select x.id,x2.id,x.d,x2.d from x left join x as x2 on replace(x.d," ","") = replace(x2.d," ","") and x.id != x2.id having !(x2.id is null);

获取重复的行。如果你有“Helloworld”(即没有空格)并且你不希望它匹配,它就会失败。

答案 1 :(得分:0)

除非您需要保留原始数据,否则最好在插入时,在比较时创建/更新记录时而不是稍后更新。

话虽如此,你可以做点什么

SELECT id, name, desc, REPLACE(desc, '  ', ' ') as replaced
                                      xx    x  <--note the number of spaces
FROM table
GROUP replaced
HAVING replaced > 1

可能不会很完美,你必须多次调整更换部分,但这应该让你开始。