2016-08-12 9 views
0

У меня есть таблица sql с именем и фамилией. Фамилия находится в отдельной колонке. Проблема заключается в том, что пользователи с двумя фамилиями, потому что иногда они добавляют более одного места между фамилиями, а затем я должен найти и исправить их вручную.SQL - найти строки со значениями, имеющими 2 пробела и более между

Как найти эти фамилии с более чем одним пространством между ними?

+1

какая база данных вы используете? –

ответ

1

Сначала удалите лишние пробелы. Затем добавить ограничение, что делает, что это не повторится:

alter table tablename add constraint surname_verify check (surname not like '% %') 

(Или, еще лучше, есть триггер убедившись, что фамилии правильно расположены, обсаженные и т.д.)

Как удалить дополнительным пространства? Зависит от dbms.

Вы можете, возможно, сделать что-то вроде:

update tablename set surname = replace(surname, ' ', ' ') 
where surname like '% %' 

Предложение where не требуется, но делает сделку гораздо меньше.

(Итерируйте, чтобы избавиться от трех или более пробелов.) Или используйте regexp_replace.

+0

пока что я нашел решение :) SELECT * FROM 'table' ГДЕ (фамилия LIKE '%%') – unforgiven

+0

Отлично. Еще добавьте это ограничение! – jarlh

0

Даже опрятнее:

select string = replace(replace(replace(' select single  spaces',' ','<>'),'><',''),'<>',' ') 

Выходные:

выбрать одиночные пространства

2

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

SELECT surname 
FROM yourTable 
WHERE LENGTH(REPLACE(surname, ' ', '')) < LENGTH(surname) - 1 

Th запрос будет обнаруживать два или более пробелов в столбце surname. Если вы также хотите сделать UPDATE, это возможно, но это будет довольно специфично для базы данных, и вы не указали свою базу данных на момент написания этого ответа.