Задавайте вопросы, мы ответим
Вы не зашли.
вопрос состоит в том что возможно ли отделить название и номер приблизительно таk
____________________________________
n_id | Strasse | o_str | o_hnr |
--------------------------------------------------|-
1 | Moskowstr. 25| Moskowstr. | 25 |
Неактивен
Средствами MySQL можно подстроку фиксированной длины типа SELECT SUBSTR(Strasse, 10):
http://dev.mysql.com/doc/refman/5.1-mar … _substring
Если нужно что-то более сложное, то придется использовать какой-нибудь клиент с поддержкой регулярных выражений Perl.
Неактивен
Пробел можно без регулярных выражений найти в строке http://dev.mysql.com/doc/refman/5.0/en/ … ion_locate
Неактивен
спасибо но это немного другое у мея есть талица в базе
5000 записей
____________________________________
n_id | Strasse | o_str | o_hnr |
-------------------------------------------------|-
1 | Moskowstr. 25| | |
и нужно разделить эти два значения в
____________________________________
n_id | Strasse | o_str | o_hnr |
--------------------------------------------------|-
1 | Moskowstr. 25| Moskowstr. | 25 |
я думал лучше попробовать в Exel и импортровать в MySQL но немогу найти формулу для Exel
Danke !
Неактивен
Самое то. Насколько я понимаю вам нужно разделить содержимое поля Strasse по пробелу и занести результат в новые поля. С помощью функции locate() вы определяете позицию пробела.
Отредактированно vasya (16.05.2008 00:21:33)
Неактивен
das war Supper vielen Dank!!!!!!!!!!!!!!!!
но есть небольшая проблема название может быть разделено пробелом и тогда получается
________________________________________________
n_id | Strasse | o_str | o_hnr |
------------------------------------------------------------------ |-
1 | Alte Moskowstr. 25|Alte | Moskowstr. 25 |
Отредактированно viktorrrrrr (16.05.2008 11:36:44)
Неактивен
Если пробел может быть только в названии (неважно сколько раз), то для преодоления этой сложности можно использовать функцию reverse(). Дело в том, что locate() определяет только первое вхождение подстроки.
Неактивен
огромное спасибо
weiter so !!!!!!!!!!!!!!!!!!!
Неактивен
возможно сделать так чтобы LOCATE искал не пробел а первую цифру в диапазоне [ 0......9]
потому что если нет пробела между названием и цифрой то роисходит следующее
___________________________________________________
n_id | Strasse | o_str | o_hnr |
-----------------------------------------------------------------------|
1 | Alte Moskowstr.25 |Alte | Moskowstr.25 |
2 | Moskowstr.8 | -- | -- |
3 |Alte Moskowstr Nr.2 |Alte Moskowstr | Nr.2 |
Отредактированно viktorrrrrr (21.05.2008 16:38:49)
Неактивен
Я думаю, можно, но это будет оч. громоздко
Я вижу только возможность написать процедуру, в которой тупо перечислить через IF все цифры. Более изящного решения в голову не приходит.
Неактивен
Можно написать многократно вложенный IF в запросе, но это действительно будет громоздко. Зато одним запросом, если в скобках не запутаетесь
IF имеет 3 аргумента - условие, значение в случае истинности условия и значение в случае ложности условия.
Неактивен
должно получится что то такое ?
set @a = 'Alte Banhofstr.25';
select reverse(substring(reverse(@a), 1, if(locate('1', reverse(@a), locate('1',reverse(@a)),
if(locate('2', reverse(@a), locate('2',reverse(@a)),
if(locate('3', reverse(@a), locate('3',reverse(@a)),
if(locate('4', reverse(@a), locate('4',reverse(@a)),
if(locate('5', reverse(@a), locate('5',reverse(@a)),
if(locate('6', reverse(@a), locate('6',reverse(@a)),
if(locate('7', reverse(@a), locate('7',reverse(@a)),
if(locate('8', reverse(@a), locate('8',reverse(@a)),
if(locate('9', reverse(@a), locate('9',reverse(@a)))))))))))));
+--------------------------------------------------------------+
| REVERSE(SUBSTRING(REVERSE(@a), 1, LOCATE(' ', REVERSE(@a)))) |
+--------------------------------------------------------------+
| 25 |
+--------------------------------------------------------------+
1 row IN SET (0.01 sec)
select reverse(substring(reverse(@a), if(locate('1', reverse(@a), locate('1',reverse(@a)),
if(locate('2', reverse(@a), locate('2',reverse(@a)),
if(locate('3', reverse(@a), locate('3',reverse(@a)),
if(locate('4', reverse(@a), locate('4',reverse(@a)),
if(locate('5', reverse(@a), locate('5',reverse(@a)),
if(locate('6', reverse(@a), locate('6',reverse(@a)),
if(locate('7', reverse(@a), locate('7',reverse(@a)),
if(locate('8', reverse(@a), locate('8',reverse(@a)),
if(locate('9', reverse(@a), locate('9',reverse(@a)))))))))))));
mysql> SELECT REVERSE(SUBSTRING(REVERSE(@a), LOCATE(' ', REVERSE(@a))));
+-----------------------------------------------------------+
| REVERSE(SUBSTRING(REVERSE(@a), LOCATE(' ', REVERSE(@a)))) |
+-----------------------------------------------------------+
| Alte Moskowstr. |
+-----------------------------------------------------------+
update table_name set o_str =
reverse(substring(reverse(strasse), 1, if(locate('1', reverse(strasse), locate('1',reverse(strasse)),
if(locate('2', reverse(strasse), locate('2',reverse(strasse)),
if(locate('3', reverse(strasse), locate('3',reverse(strasse)),
if(locate('4', reverse(strasse), locate('4',reverse(strasse)),
if(locate('5', reverse(strasse), locate('5',reverse(strasse)),
if(locate('6', reverse(strasse), locate('6',reverse(strasse)),
if(locate('7', reverse(strasse), locate('7',reverse(strasse)),
if(locate('8', reverse(strasse), locate('8',reverse(strasse)),
if(locate('9', reverse(strasse), locate('9',reverse(strasse))))))))))))),
o_hnr =
reverse(substring(reverse(strasse), if(locate('1', reverse(strasse), locate('1',reverse(strasse)),
if(locate('2', reverse(strasse), locate('2',reverse(strasse)),
if(locate('3', reverse(strasse), locate('3',reverse(strasse)),
if(locate('4', reverse(strasse), locate('4',reverse(strasse)),
if(locate('5', reverse(strasse), locate('5',reverse(strasse)),
if(locate('6', reverse(strasse), locate('6',reverse(strasse)),
if(locate('7', reverse(strasse), locate('7',reverse(strasse)),
if(locate('8', reverse(strasse), locate('8',reverse(strasse)),
if(locate('9', reverse(strasse), locate('9',reverse(strasse)))))))))))));
Отредактированно viktorrrrrr (23.05.2008 11:00:29)
Неактивен