URL을 나타내는 문자열에서 쿼리 인수를 추출하고 싶습니다. 저장된 함수에서 쿼리 인수를 추출하고 싶습니다. 사용할 수있는 표준 함수는 무엇입니까?).URL에서 HTTP 쿼리 인수를 추출하는 PostgreSQL 함수
파이썬에서,이는 다음과 같습니다
이from urlparse import urlparse, parse_qs
def extract_oid(url):
"""
extract the 'oid' query argument
(simplified, no error handling)
>>> extract_oid('http://some.host/some/path?oid=abc123&other')
'abc123'
"""
return parse_qs(urlparse(url).query)['oid'][0]
plpgsql
에서 나의 현재의 시도는 다음과 같습니다
CREATE OR REPLACE FUNCTION extract_oid (link text)
RETURNS text
AS $$
DECLARE
pos1 integer := position('&oid=' in link);
tail text := substring(link from pos1 + 1);
endpos integer := position('&' in tail);
BEGIN
if link is NULL or pos1 = 0 then
RETURN NULL;
ELSIF endpos = 0 then
RETURN substring(tail from 5);
ELSE
RETURN substring(tail from 5 for endpos - 1);
END IF;
END;
$$ LANGUAGE plpgsql;
oid
가 쿼리 문자열의 마지막 인수가 적어도가있는 경우이 잘 작동 전임자 (그렇지 않으면 ?oid=
도 인식해야합니다). 그러나 다른 다음 &
있을 때 실패합니다. 여기에 sefe하고 싶습니다 ...
endpos
변수에 문제가있는 것 같습니다.
나를 계몽 할 수 있습니까? 고맙습니다!
PostgreSQL 9.3 이상에서 작동하려면이 기능이 필요합니다. 내 논리적 오류를 발견
(물론 나는 나를 바보, 1보다는 5를 뺄 필요), 그러나 말의 대답 후, 내 기능은 다음과 같습니다 : 편집
CREATE OR REPLACE FUNCTION extract_oid (url text)
RETURNS text
AS $$
BEGIN
RETURN split_part(substring(url from '[?&]oid=[^&]+'), '=', 2);
END;
$$ LANGUAGE plpgsql;
split_part(substring(link from 'oid=\w+'), '=', 2)
:
예, 감사합니다 9.3에서 작동한다고 생각합니다! 나는 'from'표현을''[? &] oid = [^ &] + ''로 변경하여'otherprefixoid' 변수를 무시하고 비 단어 문자도 허용했습니다. – Tobias