Вы создаете определенный пользователь функцию - до тех пор, как потенциальный почтовый индекс обнесен пространством или в последних лексемах положения это должно работать
drop function if exists tokens;
delimiter //
create function tokens(instring varchar(255))
returns varchar(255)
begin
declare tempstring varchar(100);
declare outstring varchar(100);
declare checkit int;
set tempstring = ltrim(rtrim(instring));
set checkit = 0;
looper: while tempstring is not null and instr(tempstring,' ') > 0 do
set outstring = substr(tempstring,1,instr(tempstring, ' ') - 1);
set tempstring = ltrim(rtrim(replace(tempstring,outstring,'')));
if length(outstring) = 5 then
if substring(outstring,1,1) between char(48) and char(57) and
substring(outstring,2,1) between char(48) and char(57) and
substring(outstring,3,1) between char(48) and char(57) and
substring(outstring,4,1) between char(48) and char(57) and
substring(outstring,5,1) between char(48) and char(57) then
set checkit = 1;
leave looper;
end if;
end if;
end while;
if checkit = 0 then
set outstring = tempstring;
if length(outstring) = 5 then
if substring(outstring,1,1) between char(48) and char(57) and
substring(outstring,2,1) between char(48) and char(57) and
substring(outstring,3,1) between char(48) and char(57) and
substring(outstring,4,1) between char(48) and char(57) and
substring(outstring,5,1) between char(48) and char(57) then
set checkit = 1;
end if;
end if;
end if;
if checkit = 0 then set outstring = 'NotFound'; end if;
return outstring;
end //
delimiter ;
и с учетом этого
+------+---------------------+
| id | address |
+------+---------------------+
| 1 | 13 mont 12c45 st |
| 2 | 13 mont 12345 st |
| 3 | 13 mont 12c45 45678 |
| 4 | 56789 mont 12c45 st |
+------+---------------------+
Функцией возвращает это
+------+---------------------+----------+
| id | address | zipcode |
+------+---------------------+----------+
| 1 | 13 mont 12c45 st | NotFound |
| 2 | 13 mont 12345 st | 12345 |
| 3 | 13 mont 12c45 45678 | 45678 |
| 4 | 56789 mont 12c45 st | 56789 |
+------+---------------------+----------+
Я не думаю, что 'INSTR' поддерживает регулярное выражение. Можете ли вы показать пример, который вы пытаетесь извлечь? –
Если вы покажете нам пример PERSON_ADDRESS, кто-то покажет вам, как сделать извлечение – RiggsFolly
Хотя моя первая мысль заключалась в том, что вы сделали базовую ошибку в своем проекте базы данных, _Why является zipcode не в своем собственном столбце_ – RiggsFolly