2010-01-13 4 views

ответ

6

Как о чем-то вроде этого - обрежьте все вплоть до первого места в строках, которые начинаются с номера

UPDATE mytable 
SET addresscol=SUBSTRING(addresscol, LOCATE(' ', addresscol)+1) 
WHERE addresscol REGEXP '^[0-9]'; 
+0

Остерегайтесь особых случаев. Номер улицы может содержать такие дополнения, как «15А» или «4968b» или «340-364». –

+0

Ни один из этих особых случаев не будет сфокусирован на данном подходе :) Но да, любой подход, подобный этому, должен быть сначала проверен на доступных данных! –

+0

удивительный подход !! :) спасибо – ufk

0

MySQL не имеет регулярное выражение заменить функции, так это зависит от значений в столбце , Если строка всегда начинается с числа, а затем пробела, вы можете сделать это с помощью запроса SQl, который Пол Диксон опубликовал (doh, он был быстрее меня: D).

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

0

Я думаю, что это должно делать работу на том основании, что каждая запись имеет свой адрес улицы, отделенный от номера дома пробелом («»);

UPDATE table 
SET streetaddress = MID(streetaddress, LOCATE(' ', streetaddress) + 1); 

Я тестировал это, и он отлично работает.

Вы также можете использовать следующее, если вы хотите извлечь номер дома в новый столбец, предшествующий обновлению;

UPDATE table 
SET housenumber = MID(streetaddress, 1, LOCATE(' ', streetaddress) - 1); 
1

Это основано на @Paul Диксона выше, но только для возврата результатов без обновления данных для таких вещей, как сортировка:

SELECT IF(address REGEXP '^[0-9]', SUBSTRING(address, LOCATE(' ', address)+1), address) AS addrSort FROM table;