我有一个这种类型的字符串:
URL/X/help?
X代表字符,例如:a,b,c等。该位置只有一个字符。
URL的长度未知,可以是:www.website.com
,www.website.co.uk
,www.website.info
等...
我想找出/X/
在字符串中的位置,但前提是X
是:s,b,t
/ X /-在字符串中仅出现一次。
类似的东西:
select position ('/s/' or '/b/' or '/t/' in URL)
但这不是PostgreSQL语法。
除了执行以下操作之外,是否有其他方法可以编写此查询:
select position ('/s/' in URL) +
select position ('/b/' in URL) +
select position ('/t/' in URL)
编辑:
没有复杂的案例。无需担心/s/s
或/b//s/
或/s/g/
或/s/..../s/
等……只是我介绍的简单案例。它还保证/CHAR/
只会出现一次,但字符是未知的。
答案 0 :(得分:2)
由于您想知道是否可以使用正则表达式来完成此操作,所以这里是一个:
select
coalesce(nullif(length(regexp_replace(url, '\/[sbt]\/.*', '')), length(url))+1, 0) as pos
from ( select 'www.webexample.com/s/help?' as url union all
select 'www.webexample.com/d/help?' as url ) t;
输出:
| pos |
+-----+
| 19 |
| 0 |
它如何工作?
regexp_replace
查找并替换从/s/
,/b/
或/t/
开始的字符串部分,直到字符串末尾带有空白字符''
length
,以查看/
之前最后一个字符的位置nullif
函数,如果字符串替换后的URL长度等于原始URL的长度,则返回NULL
[sbt]
coalesce
函数,将NULL
的值转换为0
感谢@Abelisto输入