У меня есть таблица со структурой, как это ...простой подстановки параметров в функции regexp_matches PostGreSQL
the_geom данные
geom1 data1+3000||data2+1000||data3+222
geom2 data1+500||data2+900||data3+22232
Я хочу создать функцию, которая возвращает записи по запросу пользователя.
Example: for data2, retrieve geom1,1000 and geom2, 900
До сих пор я создал эту функцию (см ниже), который работает достаточно хорошо, но я столкнулся с проблемой замещения параметр ... (вы можете видеть, что я не в состоянии заменить «data2» за $ 1 в .. . Но да, я могу использовать $ 1 позже
regexp_matches(t::text, E'(data2[\+])([0-9]+)'::text)::text)[2]::integer
МОЕЙ фУНКЦИЮ
create or replace function get_counts(taxa varchar(100))
returns setof record
as $$
SELECT t2.counter,t2.the_geom
FROM (
SELECT (regexp_matches(t.data::text, E'(data2[\+])([0-9]+)'::text)::text)[2]::integer as counter,the_geom
from (select the_geom,data from simple_inpn2 where data ~ $1::text) as t
) t2
$$
language sql;
SELECT get_counts('data2') will work **but we should be able to make this substitution**:
regexp_matches(t::text, E'($1... instead of E'(data2....
Я думаю, что его больше вопроса syntaxis, как выполнение функции не дает никакой ошибки, просто интерпретирует $ 1 в виде строки и не дает никакого результата
спасибо заранее,
Итак, вы хотите использовать параметр '$ 1' для своей функции вместо части' data2' вашего '(data2 [\ +]) ([0-9] +)' regex? –
да, есть. Как я уже сказал, если я прямо поставил .. regexp_matches (t.data::text, E '($ 1 ... буквально интерпретируется ($ 1), не давая результата. Я пробовал несколько вариантов синтаксиса без успеха. – user1249791