2011-01-24 5 views
0

у меня есть необычный запрос, который получил меня застрял прямо сейчасMySQL Query, удалите все пробелы

Таблица Поля:

id bigint 20 
name varchar 255 
desc text 

Есть много записей с таким же именем и по алфавиту, но убывание есть некоторые лишние пробелы между словами в

как

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

Мне нужно, чтобы найти те строки, си milar данные

Как я могу найти их, спасибо.

ответ

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» (т. Е. Без пробела), и вы не хотите, чтобы это соответствовало.

0

Если вам не нужно сохранять исходные данные, лучше всего сделать это во время вставки, когда вы создаете/обновляете запись, а не позже, во время сравнения.

Это, как говорится, вы могли бы сделать что-то вроде

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

Вероятно, не будет отлично, и вы должны настроить на замену Порция несколько раз, но это должно вам начать работу.

Смежные вопросы