|
|
|
| Здравствуйте!
есть вопрос.
В поле street записи имееют примерно следующий вид:
198334, Санкт-Петербург, проспект Ветеранов, д. 140, корп. 2
198332, Санкт-Петербург, улица Маршала Казакова д. 40, корпус 2, литер А
610044, г. Киров, ул. Физкультурников, 15
662165, Красноярский край, г. Ачинск, ул. Л.Толстого, 15
|
некоторые записи имееют "правильный" - только улицу и дом
Греческий пр., д. 21
Морская набережная, д. 15, корп. 2
ул.Эльгера,24
| Как написать запрос чтобы адрес
198332, Санкт-Петербург, улица Маршала Казакова д. 40, корпус 2, литер А
| стал
улица Маршала Казакова д. 40, корпус 2, литер А
| или
198334, Санкт-Петербург, проспект Ветеранов, д. 140, корп. 2
| превратился в
проспект Ветеранов, д. 140, корп. 2
|
Можно в ручную чистить, но адресов там немеренно. | |
|
|
|
|
|
|
|
для: liberty
(23.03.2013 в 09:36)
| |
UPDATE имя_таблицы
SET `street`=trim(substr(`street`,char_length(substring_index(`street`,',',2))+2))
WHERE `street` REGEXP '^[0-9]{6},'
|
| |
|
|
|
|
|
|
|
для: Sfinks
(23.03.2013 в 12:44)
| | лишнее не удалит?
во многих адресах ведь нет индекса. | |
|
|
|
|
|
|
|
для: liberty
(23.03.2013 в 19:21)
| | > лишнее не удалит?
Обычно перед такими делами делают бэкап
> во многих адресах ведь нет индекса.
Вот эта часть
WHERE `street` REGEXP '^[0-9]{6},'
| означает, что изменения коснутся только адресов, которые начинаются с 6ти цифр
Вот эта:
char_length(substring_index(`street`,',',2))
| определяет длинну строки от начала до второй запятой.
SUBSTR -отбрасывает все что находится до второй запятой и ее саму тоже.
Так что если где-то нет города, края и т.п. или разделителем служит не запятая - нужно как-то изолировать такие записи, либо привести сперва все к одному формату. | |
|
|
|
|
|
|
|
для: Sfinks
(23.03.2013 в 22:53)
| | а как быть с теми записями, которые уже имееют "правильный" вид?
что с ними произойдет, коснется ли их этот запрос? | |
|
|
|
|
|
|
|
для: liberty
(23.03.2013 в 23:12)
| | Второй абзац постом выше прочитайте. | |
|
|
|