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

Форум MySQL

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

 

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

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

тема: Обработка строк в таблице.
 
 автор: sannyk   (04.09.2011 в 12:52)   письмо автору
 
 

Ситуация такая:
Есть таблица со столбцом 'city' , в ней хранятся названия городов в нечитабельном виде - например ' ! KiEv!!!' или '221moSKVA ' . Нужно убрать все лишнее до первой буквы и после первого символа табуляции, если он есть, также перевести первую букву в верхний регистр а остальное в нижний.

UPDATE testing SET city=LOWER(LTRIM(RTRIM(city)));

UPDATE testing SET city=CONCAT(UPPER(SUBSTRING(city,1,1)), SUBSTRING(city,2)); 


Вот что получилось у меня пока что. Вот только не знаю как убрать начальные цифры до первой буквы и символы, если они есть.

такой запрос не проходит
SELECT TRIM(BOTH REGEXP'[0-9]' FROM '221moSKVA');

  Ответить  
 
 автор: Valick   (04.09.2011 в 13:04)   письмо автору
 
   для: sannyk   (04.09.2011 в 12:52)
 

ups)

  Ответить  
 
 автор: sannyk   (04.09.2011 в 13:13)   письмо автору
 
   для: Valick   (04.09.2011 в 13:04)
 

таблица называться testing а столбец с городами city , 221moSKVA - это запись в city. а нужно все записи в city перебрать и удалить все что есть до первой буквы и все что есть после первого знака пунктуации.

UPDATE testing SET city=TRIM(BOTH [0-9] FROM 'city'); 
тоже ведь не так(((

ХМ вот подумал наверное нужно просто проверять первый символ строки на то буква это или нет, если буква ничего не делать, если что то другое то удалять и сдвигать строку на -1.
правильный ход мыслей? вот только какой функцией это организовать(

  Ответить  
 
 автор: Valick   (04.09.2011 в 13:31)   письмо автору
 
   для: sannyk   (04.09.2011 в 13:13)
 

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

  Ответить  
 
 автор: sannyk   (04.09.2011 в 13:40)   письмо автору
 
   для: Valick   (04.09.2011 в 13:31)
 

Еще желательно запихнуть это все в хранимую процедуру) но это тоже я не придумаю как сделать)

  Ответить  
 
 автор: Valick   (04.09.2011 в 13:51)   письмо автору
 
   для: sannyk   (04.09.2011 в 13:40)
 

ай... а это еще зачем? ожидаются новые поступления дерьмоданных?)

  Ответить  
 
 автор: sannyk   (04.09.2011 в 14:08)   письмо автору
 
   для: Valick   (04.09.2011 в 13:51)
 

хех))) та мало ли)

Что идей нету никаких???

  Ответить  
 
 автор: Valick   (04.09.2011 в 21:20)   письмо автору
 
   для: sannyk   (04.09.2011 в 14:08)
 

пока кроме как доставать значения и править их средствами РНР идей нет :(
__
кстати зачем в базе хранить название города с большой буквы? её легко сделать при выводе

  Ответить  
 
 автор: sannyk   (04.09.2011 в 21:25)   письмо автору
 
   для: Valick   (04.09.2011 в 21:20)
 

та мне нужно нормализировать эту таблицу) вот попробовал функцией написать тоже не доведу никак до ума.

CREATE FUNCTION norm_city (new_name VARCHAR(255)) RETURNS VARCHAR(255) CHARSET latin1
BEGIN
DECLARE new_name VARCHAR(255);
SET new_name=LTRIM(RTRIM(new_name));
WHILE new_name RLIKE '^[[:digit:]+[[:punct:]]'DO
BEGIN
SET new_name=SUBSTRING(new_name,2);
edn WHILE;
SET new_name=CONCAT(UPPER(SUBSTRING(new_name,1,1)), SUBSTRING(new_name,2));
CASE 
 WHEN new_name RLIKE '^[[alpha]]' THEN SET new_name='[[alpha]]';
 
END CASE;
RETURN new_name;
END // 

  Ответить  
 
 автор: Valick   (04.09.2011 в 22:45)   письмо автору
 
   для: sannyk   (04.09.2011 в 21:25)
 

UPDATE testing SET city=IF((city REGEXP'^[a-z,а-я]'),city, SUBSTRING(city,2))

нужно несколько раз прогнать по базе
лучше пока ничего на ум не идёт

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

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