|
|
|
| Ситуация такая:
Есть таблица со столбцом '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');
|
| |
|
|
|
|
|
|
|
для: sannyk
(04.09.2011 в 12:52)
| | ups) | |
|
|
|
|
|
|
|
для: Valick
(04.09.2011 в 13:04)
| | таблица называться testing а столбец с городами city , 221moSKVA - это запись в city. а нужно все записи в city перебрать и удалить все что есть до первой буквы и все что есть после первого знака пунктуации.
UPDATE testing SET city=TRIM(BOTH [0-9] FROM 'city');
| тоже ведь не так(((
ХМ вот подумал наверное нужно просто проверять первый символ строки на то буква это или нет, если буква ничего не делать, если что то другое то удалять и сдвигать строку на -1.
правильный ход мыслей? вот только какой функцией это организовать( | |
|
|
|
|
|
|
|
для: sannyk
(04.09.2011 в 13:13)
| | для начала я думаю нужно купить пол литра водки выпить и пойти набить морду тому кто все это запихал в базу в таком виде :)))
идея о проверке каждого символа мне тоже пришла в голову, т.е. чистить базу в несколько проходов
__
задача интересная... думаю) | |
|
|
|
|
|
|
|
для: Valick
(04.09.2011 в 13:31)
| | Еще желательно запихнуть это все в хранимую процедуру) но это тоже я не придумаю как сделать) | |
|
|
|
|
|
|
|
для: sannyk
(04.09.2011 в 13:40)
| | ай... а это еще зачем? ожидаются новые поступления дерьмоданных?) | |
|
|
|
|
|
|
|
для: Valick
(04.09.2011 в 13:51)
| | хех))) та мало ли)
Что идей нету никаких??? | |
|
|
|
|
|
|
|
для: sannyk
(04.09.2011 в 14:08)
| | пока кроме как доставать значения и править их средствами РНР идей нет :(
__
кстати зачем в базе хранить название города с большой буквы? её легко сделать при выводе | |
|
|
|
|
|
|
|
для: 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 //
|
| |
|
|
|
|
|
|
|
для: sannyk
(04.09.2011 в 21:25)
| |
UPDATE testing SET city=IF((city REGEXP'^[a-z,а-я]'),city, SUBSTRING(city,2))
|
нужно несколько раз прогнать по базе
лучше пока ничего на ум не идёт | |
|
|
|