Postgresql
Postgres 中是否有更簡潔的方法來提取字元串的一部分?
我正在使用 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()
將第一個之後的所有內容替換?
為空:select regexp_replace(url, '\?.*$', '')
下面的例子:
with data (url) as ( values ('http://foo.bar/some/page'), ('http://foo.bar/some/page?id=42&name=Marvin') ) select url, regexp_replace(url, '\?.*$', '') as clean_url from data;
返回:
url | clean_url -------------------------------------------+------------------------- http://foo.bar/some/page | http://foo.bar/some/page http://foo.bar/some/page?id=42&name=Marvin | http://foo.bar/some/page