Postgresql

Postgres 中是否有更簡潔的方法來提取字元串的一部分?

  • March 18, 2019

我正在使用 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

引用自:https://dba.stackexchange.com/questions/232297