Substring RegExp Extract path

Started by Nonameover 21 years ago3 messagesgeneral
Jump to latest
#1Noname
nicholas.wakefield@gmail.com

Hi,

I'm trying to extract element of a directory path stored in the db with substring

"/help/support/index/time.jsp"

and i want to extract the 1st, 2nd and 3rd parts

1st = help, 2nd = support, 3rd = index

but I can't get the regular expressions correct.

Any ideas on what I need to do.

select substring(data,'????') from paths

TIA

#2Joe Conway
mail@joeconway.com
In reply to: Noname (#1)
Re: Substring RegExp Extract path

Nick wrote:

"/help/support/index/time.jsp"

and i want to extract the 1st, 2nd and 3rd parts

1st = help, 2nd = support, 3rd = index

Are you using 7.4? If so:

select split_part('/help/support/index/time.jsp','/',2),
split_part('/help/support/index/time.jsp','/',3),
split_part('/help/support/index/time.jsp','/',4),
split_part('/help/support/index/time.jsp','/',5);
split_part | split_part | split_part | split_part
------------+------------+------------+------------
help | support | index | time.jsp
(1 row)

See:
http://www.postgresql.org/docs/current/static/functions-string.html

On Postgres 8.0.0beta1 you could also do:

select s.f[2], s.f[3], s.f[4]
from (select string_to_array('/help/support/index/time.jsp','/') as f)
as s;
f | f | f
------+---------+-------
help | support | index
(1 row)

HTH,

Joe

#3Jim Wilson
jimw@kelcomaine.com
In reply to: Joe Conway (#2)
Re: Substring RegExp Extract path

Joe Conway said:

Nick wrote:

"/help/support/index/time.jsp"

and i want to extract the 1st, 2nd and 3rd parts

1st = help, 2nd = support, 3rd = index

Are you using 7.4? If so:

select split_part('/help/support/index/time.jsp','/',2),
split_part('/help/support/index/time.jsp','/',3),
split_part('/help/support/index/time.jsp','/',4),
split_part('/help/support/index/time.jsp','/',5);
split_part | split_part | split_part | split_part
------------+------------+------------+------------
help | support | index | time.jsp
(1 row)

See:
http://www.postgresql.org/docs/current/static/functions-string.html

On Postgres 8.0.0beta1 you could also do:

select s.f[2], s.f[3], s.f[4]
from (select string_to_array('/help/support/index/time.jsp','/') as f)
as s;
f | f | f
------+---------+-------
help | support | index
(1 row)

Or if using the substring function in earlier versions:

select substring('/help/support/index/time.jsp','/(.*)/.*/.*/.*'),
substring('/help/support/index/time.jsp','/.*/(.*)/.*/.*'),
substring('/help/support/index/time.jsp','/.*/.*/(.*)/.*'),
substring('/help/support/index/time.jsp','/.*/.*/.*/(.*)');

substring | substring | substring | substring
-----------+-----------+-----------+-----------
help | support | index | time.jsp
(1 row)

Best regards,

Jim