gpt4 book ai didi

sql - 如何在 PostgreSQL 中查找多个子字符串的位置?

转载 作者:行者123 更新时间:2023-11-29 12:51:55 26 4
gpt4 key购买 nike

我有一个这种类型的字符串:

URL/X/help?

X 代表字符,例如:a、b、c 等...那个地方只有一个字符。URL 的长度未知,它可以是:www.website.comwww.website.co.ukwww.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/ 只会出现一次,但 char 是未知的。

最佳答案

既然你想知道是否有办法使用正则表达式来做到这一点,这里有一个:

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 |

它是如何工作的?

  1. 使用 regexp_replace 查找和替换从 /s//b//t/ 开始的字符串部分> 到带有空白字符的字符串结尾 ''
  2. 计算结果的长度以查看/之前最后一个字符的位置
  3. 应用 nullif 函数,如果字符串替换后的 url 长度等于原始 url 的长度,则返回 NULL
  4. 添加 +1 以获得类中任何字符之前的斜线位置:[sbt]
  5. 应用 coalesce 函数将 NULL 值转换为 0

感谢@Abelisto 的输入

关于sql - 如何在 PostgreSQL 中查找多个子字符串的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51925037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com