SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » MySQL, MariaDB » Парсирование адреса средствами mysql (Парсирование адреса средствами mysql)
Парсирование адреса средствами mysql [сообщение #2052] Wed, 12 April 2023 11:11 Переход к следующему сообщению
maksdev в настоящее время не в онлайне  maksdev
Сообщений: 2
Зарегистрирован: April 2023
Географическое положение: Архангельск
Junior Member
Коллеги, привет!
В общем вопрос вот какой. Имеется база данных mysql. В базе есть таблица note_bodys, следующей структуры code int, name varchar(50). В таблице содержаться улицы. Хочу создать функцию с входным параметром в который будет передаваться адрес. Нужно парсировать входной параметр в котором нужно отпарсить улицу и на выходе функции идентификатор (code) из таблицы note_bodys. Собственно вопрос, как организовать сравнение по части строки?

delimiter //

create or replace function search_street(vStreet varchar(100)) returns int(11)
begin
	declare vNoteID int;
	declare vNoteName varchar(50);
	declare done int default 0;
	declare StreetCursor for select nb_code, nb_name from note_bodys where nb_header = 6;
	declare continue handler for sqlstate '0200' set done = 1;
	open StreetCursor;
	
	repeat
		fetch StreetCursor into vNoteID, vNoteName;
		if not done then 
			//Вот  вариантик - только не пойму как забрать результат = 1
			select locate (vNoteName, vStreet)	
		
		end if;
	until done end repeat;
	close StreetCursor; 
	return vNoteID;
end;

//

delimiter ;

[Обновления: Wed, 12 April 2023 11:54]

Известить модератора

Re: Парсирование адреса средствами mysql [сообщение #2053 является ответом на сообщение #2052] Wed, 12 April 2023 13:02 Переход к предыдущему сообщению
maksdev в настоящее время не в онлайне  maksdev
Сообщений: 2
Зарегистрирован: April 2023
Географическое положение: Архангельск
Junior Member
Вопрос закрыт. Кому интересно - вот конечный вариант кода

delimiter //

create or replace function search_street(vAddress varchar(100)) returns int
begin 
	declare vNoteID int default 0;
	declare vNoteName varchar(100);
	declare done int default 0;
	declare vCode int default 0;
	declare StreetCursor cursor for select nb_code, nb_name from note_bodys where note_bodys.nb_header = 6; 
	declare continue handler for sqlstate '02000' set done = 1;
	open StreetCursor;
	
	repeat
		fetch StreetCursor into vNoteID, vNoteName;
		if not done then
			select locate (replace(vNoteName,'.',''), vAddress) into vCode;
			if vCode = 1 then
				return vNoteId;
			end if;
		end if;
	until done end repeat;
	close StreetCursor;
	return vCode;
end;

//

delimiter ;


Предыдущая тема: Несколько ID в строке через запятую
Следующая тема: Вопрос про PITR
Переход к форуму:
  


Текущее время: Fri Mar 29 17:43:38 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00880 секунд