Каков синтаксис создания регулярного выражения для вычисляемого поля в MySQL?
Здравствуйте, я не уверен что так, быстрее чем с PHP (зато лишних прокладок не будет) но, хотелось бы узнать. каким образом можно составить регулярное выражение для вычисляемого поля в таблице MySQL.
Банальный пример:
| id | adress | street | home |
| 1 | g. Mocsow, ul. Sadovaya, h. 24, | ? | ? |
| 2 | g. Mocsow, pr. Dezhnva, h. 23 , | ? | ? |
Вот ну и соотвествтенно получить улицу и дом. в отдельные поля.
Формат строки таков: г. Ухта, ул. Горького, д. 6
В принципе нормализован иможно прицепиться к тому что до "," и числу вхождений.
Ну как сказать..., вот есть такой листинг, (покапался в старых запасниках).
BEGIN
DECLARE temp VARCHAR(1000);
DECLARE ch VARCHAR(1);
DECLARE i INT;
SET i = 1;
SET temp = '';
IF original REGEXP pattern THEN
loop_label: LOOP
IF i>CHAR_LENGTH(original) THEN
LEAVE loop_label;
END IF;
SET ch = SUBSTRING(original,i,1);
IF NOT ch REGEXP pattern THEN
SET temp = CONCAT(temp,ch);
ELSE
SET temp = CONCAT(temp,replacement);
END IF;
SET i=i+1;
END LOOP;
ELSE
SET temp = original;
END IF;
RETURN temp;
END
Фактически это функция с параметрами:
pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000)
матрунич сергей: Если запись не стандартизована, то выделить что-либо можно только анализируя все возможные варианты.
Большая Садовая 15
Бол. Садовая, 15
Большая Садовая ул. 15 д.
ул. Бол. Садовая, д. 15
Попробую у меня как то так было до этого:
concat(substring_index(substring_index(substring_index(`houseProfile`.`adressHouse`,',',2),',',-(1)),' ',-(1)),' ',substring_index(substring_index(substring_index(`houseProfile`.`adressHouse`,',',2),',',-(1)),'.',1)) AS `улица`
Странно, когда подставляю в Вашу строку вместо Большой бронной такую конструкцию - (substring_index(substring_index(`test`.`adress`,',',2),',',-(1))) - Не получается
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`adress` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('г. Архангельск, ул. Полярная, д. 32');
INSERT INTO `test` VALUES ('г. Архангельск, ул. Советская, д. 22');
INSERT INTO `test` VALUES ('г. Архангельск, ул. Беломорской флотилии, д. 13');
INSERT INTO `test` VALUES ('г. Архангельск, ул. Терпких игрыстых вин, д. 13');
INSERT INTO `test` VALUES ('г. Архангельск, ул. тут-просто тест-такой, д. 13');
SELECT
test.adress AS adress,
substring_index(`test`.`adress`,',',2) AS test1,
(substring_index(substring_index(`test`.`adress`,',',2),',',-(1))) AS test2,
CONCAT_WS(' ', SUBSTR('ул. Большая бронная', LOCATE(' ', 'ул. Большая бронная')), SUBSTRING_INDEX('ул. Большая бронная', ' ' , 1)) as test5,
SUBSTR('ул. Большая бронная', LOCATE(' ', 'ул. Большая бронная')) AS test6,
LOCATE(' ', 'ул. Большая бронная') as test7,
CONCAT_WS(' ',SUBSTR((substring_index(substring_index(`test`.`adress`,',',2),',',-(1))),LOCATE(' ',(substring_index(substring_index(`test`.`adress`,',',2),',',-(1))))),SUBSTRING_INDEX(substring_index(substring_index(`test`.`adress`,',',2),',',-(1)),' ',1)) AS Name_exp_4,
substring_index(substring_index(substring_index(`test`.`adress`,',',2),',',-(1)),' ',-(1)) AS `улица`
from `test`
Спасибо огромное, вообще уже 3 раз помог, я кстати то же подумал о введении переменной, вопрос только, почему надо именно переменную вводить и как сделать чтобы вычисляемая переменная не выводилась в поле?
P.S Вообще Тостеру надо донат ввести для особенно благодарных случаев