Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление слов в поле
 
 автор: liberty   (23.03.2013 в 09:36)   письмо автору
 
 

Здравствуйте!
есть вопрос.
В поле 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

Можно в ручную чистить, но адресов там немеренно.

  Ответить  
 
 автор: Sfinks   (23.03.2013 в 12:44)   письмо автору
 
   для: 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},'

  Ответить  
 
 автор: liberty   (23.03.2013 в 19:21)   письмо автору
 
   для: Sfinks   (23.03.2013 в 12:44)
 

лишнее не удалит?
во многих адресах ведь нет индекса.

  Ответить  
 
 автор: Sfinks   (23.03.2013 в 22:53)   письмо автору
 
   для: liberty   (23.03.2013 в 19:21)
 

> лишнее не удалит?
Обычно перед такими делами делают бэкап

> во многих адресах ведь нет индекса.
Вот эта часть
WHERE `street` REGEXP '^[0-9]{6},'
означает, что изменения коснутся только адресов, которые начинаются с 6ти цифр

Вот эта:
char_length(substring_index(`street`,',',2))
определяет длинну строки от начала до второй запятой.

SUBSTR -отбрасывает все что находится до второй запятой и ее саму тоже.

Так что если где-то нет города, края и т.п. или разделителем служит не запятая - нужно как-то изолировать такие записи, либо привести сперва все к одному формату.

  Ответить  
 
 автор: liberty   (23.03.2013 в 23:12)   письмо автору
 
   для: Sfinks   (23.03.2013 в 22:53)
 

а как быть с теми записями, которые уже имееют "правильный" вид?

что с ними произойдет, коснется ли их этот запрос?

  Ответить  
 
 автор: Sfinks   (26.03.2013 в 09:08)   письмо автору
 
   для: liberty   (23.03.2013 в 23:12)
 

Второй абзац постом выше прочитайте.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования