SQL Redshift中URL字符串的复杂子字符串

时间:2015-05-27 11:34:46

标签: sql substring amazon-redshift

我有不同的网址字符串

/kampane/luxury-shoes/damska-obuv-v11574-negro-38-cerna
/pl-accesoriu-gopro-caps-doors-uni/
/crossbody-kabelka-clutch-eclipce-negro-51x50p7-2000.html
http://www.rozbaleno.cz/chladnick…/mraznicka-guzzanti-gz-40f

我需要在最后一个斜杠之后对它进行子串,但是,如果在最后一个斜杠之后是空的空间,我需要在它之前取部分。此外,我需要删除点之后的所有内容,如果点位于我需要的子字符串之后。 所以我对上面这些字符串进行子串的结果是:

damska-obuv-v11574-negro-38-cerna
pl-accesoriu-gopro-caps-doors-uni
crossbody-kabelka-clutch-eclipce-negro-51x50p7-2000
mraznicka-guzzanti-gz-40f

我无法编写代码而不会丢失任何数据。请帮忙。

2 个答案:

答案 0 :(得分:0)

一种方法是使用正则表达式和子串。但是,这可能就足够了:

select (case when url like '%/'
             then reverse(split_part(reverse(url), '/', 2))
             else reverse(split_part(reverse(url), '/', 1))
        end)

答案 1 :(得分:0)

我不想是无礼的,我真的很感谢你的帮助,谢谢!但我写道,我有一个字符串/crossbody-kabelka-clutch-eclipce-negro-51x50p7-2000.html,我需要删除点后的所有内容。这不是这个结果的作用。但我可能找到了解决方案:

右边(pagepath,1)='/'然后regexp_replace(regexp_substr(左(pagepath,LEN(页面路径)-1),'[^ /] + $'),'。html(。 )| \?(。)')else regexp_replace(regexp_substr(pagepath,'[^ /] + $'),'。html(。)| \?( 。)')结束