我正在使用 Postgres 9.5。我有一个表,其中有一列记录 URL。有时 URL 有查询字符串,有时没有。我想提取 URL,减去任何查询字符串,所以我想出了:
select substring(url, 0, case position('?' in url) when 0 then length(url)+1 else position('?' in url) end)
from article;
这似乎有点罗嗦,我想知道是否有更简洁的方法来做到这一点。我的表格列是类型TEXT
。
您可以使用
regexp_replace()
将第一个之后的所有内容替换?
为空:下面的例子:
返回:
我建议
split_part()
这样做,当然也比正则表达式更简洁、更简单、更便宜:做你想要的。如果没有'?',则整个字符串就是结果。
db<>在这里摆弄
有关的:
或者,您可以使用简单的
CASE
语句来完成。我不确定性能影响,但我有一种感觉
CASE
应该更高性能 - 我回家后会尝试测试 - 今天银行假期!在这里检查小提琴:
结果:
该解决方案不依赖于其他假设,即删除从第一个问号到结尾发生的要求,这与其他解决方案所做的假设相同。