我需要在PostgreSQL中实现stringUtils类的indexOf()方法。
假设我有一个表
,其中url
是其中一列。
url: "http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit"
我的要求是在上述URL中找到第3个'/'出现的位置,并在PostgreSQL查询
中进行子字符串操作,只取paypal-info.com
主机名。
有没有关于如何实现这个的想法将不胜感激。 谢谢。
我需要在PostgreSQL中实现stringUtils类的indexOf()方法。
假设我有一个表
,其中url
是其中一列。
url: "http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit"
我的要求是在上述URL中找到第3个'/'出现的位置,并在PostgreSQL查询
中进行子字符串操作,只取paypal-info.com
主机名。
有没有关于如何实现这个的想法将不胜感激。 谢谢。
SELECT split_part('http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit', '/', 3)
结果:
split_part
paypal-info.com
如果需要其他字符串函数,请参考此文档:http://www.postgresql.org/docs/9.1/static/functions-string.html
编辑:至于indexOf本身,我不知道是否有内置的postgres解决方案。但是使用两个字符串函数,您可以像这样实现:
SELECT strpos('http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit', split_part('http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit', '/', 4)) - 1 as index_of;
手册中的字符串函数和运算符部分相当于String.indexOf
,例如。
select position('/' in 'http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit');
create language plpythonu;
create or replace function urlhost(url text) returns text
language plpythonu
immutable strict
as $$
import urlparse
return urlparse.urlparse(url).netloc
$$;
regress=# select urlhost('http://paypal-info.com/home.webapps.cgi-bin-limit/webscr.cmd-login-submit');
urlhost
-----------------
paypal-info.com
(1 row)
只需将3替换为N,即可获得给定字符串中第N个'/'的索引
SELECT length(substring('http://asd/asd', '(([^/]*/){3})')) - 1
要从url中提取主机名,您可以使用以下代码:
SELECT substring('http://asd.com:234/qwe', 'http://([^:]+).*/')
在此进行测试:SQLFiddle
(保留HTML)
split_part()
函数中获取的第四个子字符串的位置。 - Michał Schielmann