提取相关函数

URL 提取功能可以从 HTTP URLs(或任何符合 RFC 2396 的有效 URI)中提取各组成部分。支持以下语法:

1
[protocol:][//host[:port]][path][?query][#fragment]

所提取的组成部分不包含 URI 语法分隔符,例如::?

url_extract_fragment(url) → varchar

该函数用以返回 url 地址所包含的,用以指示不同文档片段的片段标识符。

即上文提到的 [#fragment] 组成部分,指的是 # 字符之后的内容,不包含 # 符号本身。

url_extract_host(url) → varchar

该函数用以解析 url 中包含的地址,并返回其主机名部分。

url_extract_parameter(url, name) → varchar

该函数用以解析 url 中的查询字符串,并返回第一个名为 name 的参数的值。参数提取遵循 RFC 1866 中规定的方式。

url_extract_path(url) → varchar

该函数用于解析 url 中包含的地址,并返回其路径部分。

url_extract_port(url) → bigint

该函数用于解析 url 中包含的地址,并返回其端口号部分。

url_extract_protocol(url) → varchar

该函数用于解析 url 中包含的地址,并返回其所使用的协议类型。

url_extract_query(url) → varchar

该函数用于解析 url 中包含的地址,并返回其查询字符串部分。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
with tmp_url as (
select 'https://linjiangxiong.com:8080/zh-cn/dotnet/api/system.string.split?view=net-6.0#remarks' as url
)

select
url_extract_protocol(url) as protocol,
url_extract_host(url) as host,
url_extract_port(url) as port,
url_extract_path(url) as path,
url_extract_query(url) as query,
url_extract_parameter(url, 'view') as parameter,
url_extract_fragment(url) as fragment
from tmp_url

返回结果如下:

protocol host port path query parameter fragment
https linjiangxiong.com 8080 /zh-cn/dotnet/api/system.string.split view=net-6.0 net-6.0 remarks

编码相关函数

url_encode(value) → varchar

value 进行编码,以使其可以安全地包含在 URL 查询参数名称和值中:

  • 字母、数字字符不会被编码;
  • .-*、和 _ 这些字符不会被编码;
  • ASCII 空格字符被编码为 +
  • 所有其他字符都转换为 UTF-8,并将字节编码为字符串 %XX,其中 XX 是 UTF-8 字节的大写十六进制值。

示例

1
2
3
select url_encode('a_1*B-C.D LEFT语言')

-- 输出结果为 a_1*B-C.D+LEFT%E8%AF%AD%E8%A8%80

url_decode(value) → varchar

对 URL 编码的 value 进行解码。该函数是 url_encode() 函数的逆过程。

示例

1
2
3
select url_decode('a_1*B-C.D+LEFT%E8%AF%AD%E8%A8%80')

-- 输出结果为 a_1*B-C.D LEFT语言

(END)