跳到主要内容
跳到主要内容

用于操作 URL 的函数

概览

注意

本节中提到的函数为获得最高性能进行了优化,大多数情况下并不遵循 RFC-3986 标准。 实现 RFC-3986 的函数在函数名后附加 RFC,且通常会较慢。

在处理既不包含用户信息字符串也不包含 @ 符号的公开注册域名时,一般可以使用非 RFC 变体函数。 下表详细说明了 URL 中的各个符号在 RFC 与非 RFC 变体中可以()或不可以()被解析的情况:

Symbolnon-RFCRFC
' '
\t
<
>
%✔*
{
}
\
^
~✔*
[
]
;✔*
=✔*
&✔*

标记为 * 的符号在 RFC 3986 中属于子分隔符(sub-delimiters),在 @ 符号后的用户信息中是允许使用的。

URL 函数分为两类:

  • 从 URL 中提取部分内容的函数。如果 URL 中不存在相关部分,则返回空字符串。
  • 从 URL 中移除部分内容的函数。如果 URL 中没有类似内容,则 URL 保持不变。
注意

下面的函数是根据 system.functions 系统表生成的。

cutFragment

自 v1.1 版本引入

从 URL 中移除片段标识符(包括 # 号)。

语法

cutFragment(url)

参数

返回值

返回移除片段标识符后的 URL。String

示例

使用示例

SELECT cutFragment('http://example.com/path?query=value#fragment123');
┌─cutFragment('http://example.com/path?query=value#fragment123')─┐
│ http://example.com/path?query=value                            │
└────────────────────────────────────────────────────────────────┘

cutQueryString

引入版本:v1.1

从 URL 中移除查询字符串(包括问号)。

语法

cutQueryString(url)

参数

返回值

返回去除查询字符串后的 URL。String

示例

用法示例

SELECT cutQueryString('http://example.com/path?query=value&param=123#fragment');
┌─cutQueryString('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path#fragment                                         │
└──────────────────────────────────────────────────────────────────────────┘

cutQueryStringAndFragment

自 v1.1 引入

从 URL 中移除查询字符串和片段标识符,连同问号(?)和井号(#)一并删除。

语法

cutQueryStringAndFragment(url)

参数

返回值

返回去掉查询字符串和片段标识符的 URL。String

示例

使用示例

SELECT cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment');
┌─cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path                                                             │
└─────────────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomain

自 v1.1 版本引入

返回域名中,自顶级子域名起直到第一个重要子域名的这部分。

语法

cutToFirstSignificantSubdomain(url)

参数

  • url — 要处理的 URL 或域名字符串。String

返回值

返回域名中从最高层子域到第一个重要子域的那一部分(如果可能),否则返回空字符串。String

示例

使用示例

SELECT
    cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomain('www.tr'),
    cutToFirstSignificantSubdomain('tr');
┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐
│ clickhouse.com.tr                                                 │ tr                                       │                                      │
└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘

cutToFirstSignificantSubdomainCustom

引入于:v21.1

返回域名中从顶级域及其子域开始直到第一个重要子域的部分。接受自定义的 TLD 列表 名称。如果你需要一份最新的 TLD 列表或有自定义列表,此函数会很有用。

配置示例

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- 注意:路径位于 top_level_domains_path 下 -->
</top_level_domains_lists>

语法

cutToFirstSignificantSubdomainCustom(url, tld_list_name)

参数

  • url — 要处理的 URL 或域名字符串。String
  • tld_list_name — 在 ClickHouse 中配置的自定义 TLD 列表的名称。const String

返回值

返回从顶级子域名开始直至第一个重要子域名的这部分域名字符串。String

示例

在非标准域名上使用自定义 TLD 列表

SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list')
foo.there-is-no-such-domain

cutToFirstSignificantSubdomainCustomRFC

引入版本:v22.10

返回域名中包含顶级子域名直到第一个关键子域名的部分。 接受自定义的 TLD 列表名称作为参数。 如果你需要更新的 TLD 列表或有自定义列表时,此函数会很有用。 类似于 cutToFirstSignificantSubdomainCustom,但符合 RFC 3986。

配置示例

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- 注意:路径位于 top_level_domains_path 下 -->
</top_level_domains_lists>

语法

cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name)

参数

  • url — 按照 RFC 3986 规范处理的 URL 或域名字符串。- tld_list_name — 在 ClickHouse 中配置的自定义 TLD 列表名称。

返回值

返回域名中从顶级子域开始,包含直到第一个重要子域在内的部分。String

示例

使用示例

SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainCustomWithWWW

引入版本:v21.1

返回域名中包含顶级子域名、直至第一个重要子域名的部分,并且不会去掉 'www'。支持传入自定义 TLD 列表名称。如果你需要最新的 TLD 列表,或维护了自己的自定义列表,可以使用该参数。

配置示例

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
    

**语法**

```sql
cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name)

参数

  • url — 要处理的 URL 或域名字符串。
  • tld_list_name — 在 ClickHouse 中配置的自定义 TLD 列表名称。

返回值

域名的一部分,包含顶层子域名,直到第一个有意义的子域名为止,并且不会去除 www 前缀。String

示例

用法示例

SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainCustomWithWWWRFC

引入版本:v22.10

返回域名中从包含顶级子域名开始,到第一个关键子域名为止的那一部分,但不会去掉 www。 支持自定义 TLD 列表名称。 在需要最新 TLD 列表或使用自定义列表时,这会很有用。 类似于 cutToFirstSignificantSubdomainCustomWithWWW,但符合 RFC 3986

配置示例

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- 注意:路径位于 top_level_domains_path 下 -->
</top_level_domains_lists>
    

**语法**

```sql
cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name)

参数

  • url — 按 RFC 3986 进行解析的 URL 或域名字符串。
  • tld_list_name — 在 ClickHouse 中配置的自定义 TLD 列表名称。

返回值

返回域名中包含顶层子域在内、直到第一个重要子域为止的部分,并且不会移除 wwwString

示例

使用自定义 TLD 列表并保留 www 的 RFC 3986 解析

SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list')
www.example.custom

cutToFirstSignificantSubdomainRFC

引入版本:v22.10

返回域名中从顶级子域起、包含至“首个重要子域”的部分。类似于 cutToFirstSignificantSubdomain,但符合 RFC 3986

语法

cutToFirstSignificantSubdomainRFC(url)

参数

  • url — 按照 RFC 3986 规范处理的 URL 或域名字符串。String

返回值

返回包含顶级子域名直至第一个重要子域名的那一部分域名;如果无法提取,则返回空字符串。String

示例

用法示例

SELECT
    cutToFirstSignificantSubdomain('http://user:[email protected]:8080'),
    cutToFirstSignificantSubdomainRFC('http://user:[email protected]:8080');
┌─cutToFirstSignificantSubdomain('http://user:[email protected]:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:[email protected]:8080')─┐
│                                                                         │ example.com                                                                │
└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainWithWWW

引入版本:v20.12

返回域名中从顶级子域开始直到“第一个重要子域”的那一部分,且不会去除 'www.'。

cutToFirstSignificantSubdomain 类似,但如果存在,则保留 'www.' 前缀。

语法

cutToFirstSignificantSubdomainWithWWW(url)

参数

  • url — 要处理的 URL 或域名字符串。String

返回值

返回域名中从顶级子域到第一个重要子域(包含 www)的部分(如果可能),否则返回空字符串。String

示例

用法示例

SELECT
    cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomainWithWWW('www.tr'),
    cutToFirstSignificantSubdomainWithWWW('tr');
┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐
│ clickhouse.com.tr                                                        │ www.tr                                          │                                             │
└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘

cutToFirstSignificantSubdomainWithWWWRFC

引入版本:v22.10

返回域名中从顶级子域到“第一个重要子域”为止的部分,且不去除 'www'。类似于 cutToFirstSignificantSubdomainWithWWW,但符合 RFC 3986 规范。

语法

cutToFirstSignificantSubdomainWithWWWRFC(url)

参数

  • url — 按照 RFC 3986 规范处理的 URL 或域名字符串。

返回值

返回域名中包含自顶级域起直到第一个重要子域(如有则包含 'www')的部分,否则返回空字符串 String

示例

用法示例

SELECT
    cutToFirstSignificantSubdomainWithWWW('http:%2F%[email protected]/economicheskiy'),
    cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%[email protected]/economicheskiy');
┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%[email protected]/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%[email protected]/economicheskiy')─┐
│                                                                                       │ mail.ru                                                                                  │
└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘

cutURLParameter

引入版本:v1.1

从 URL 中移除名为 name 的参数(如果存在)。 此函数不会对参数名中的字符进行编码或解码,例如,Client IDClient%20ID 会被视为不同的参数名。

语法

cutURLParameter(url, name)

参数

返回值

删除了名为 name 的 URL 参数后的 URL。String

示例

用法示例

SELECT
    cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_without_a,
    cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_without_c_and_e;
┌─url_without_a────────────────┬─url_without_c_and_e──────┐
│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │
└──────────────────────────────┴──────────────────────────┘

cutWWW

在 v1.1 中引入

从 URL 的域名中移除开头的 www.(如果存在)。

语法

cutWWW(url)

参数

返回值

返回将域名开头的 www. 移除后的 URL。String

示例

使用示例

SELECT cutWWW('http://www.example.com/path?query=value#fragment');
┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐
│ http://example.com/path?query=value#fragment               │
└────────────────────────────────────────────────────────────┘

decodeURLComponent

自 v1.1 起引入

接受一个经过 URL 编码的字符串作为输入,并将其解码为原始的可读形式。

语法

decodeURLComponent(url)

参数

返回值

返回解码后的 URL。String

示例

使用示例

SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL;
┌─DecodedURL─────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1; │
└────────────────────────────────────────┘

decodeURLFormComponent

自 v1.1 起引入

使用表单编码规则(RFC-1866)对 URL 编码的字符串进行解码,其中 + 号会被转换为空格,百分号编码的字符会被解码。

语法

decodeURLFormComponent(url)

参数

返回值

返回解码后的 URL。String

示例

使用示例

SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL;
┌─DecodedURL────────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │
└───────────────────────────────────────────┘

domain

自 v1.1 起引入

从 URL 中提取主机名。

URL 可以带协议或不带协议。

语法

domain(url)

参数

返回值

如果输入字符串可以解析为 URL,则返回主机名,否则返回空字符串。String

示例

用法示例

SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk');
┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐
│ some.svn-hosting.com                                   │
└────────────────────────────────────────────────────────┘

domainRFC

自 v22.10 版本引入

从 URL 中提取主机名。 类似于 domain,但符合 RFC 3986 规范。

语法

domainRFC(url)

参数

返回值

若输入字符串可以解析为 URL,则返回主机名;否则返回空字符串。String

示例

用法示例

SELECT
    domain('http://user:[email protected]:8080/path?query=value#fragment'),
    domainRFC('http://user:[email protected]:8080/path?query=value#fragment');
┌─domain('http://user:[email protected]:8080/path?query=value#fragment')─┬─domainRFC('http://user:[email protected]:8080/path?query=value#fragment')─┐
│                                                                           │ example.com                                                                  │
└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘

domainWithoutWWW

引入于:v1.1

返回 URL 的域名,如果存在前缀 www.,则去除该前缀。

语法

domainWithoutWWW(url)

参数

返回值

如果输入字符串可以解析为 URL,则返回其域名(不带前缀 www.),否则返回空字符串。String

示例

使用示例

SELECT domainWithoutWWW('http://[email protected]:80/');
┌─domainWithoutWWW('http://[email protected]:80/')─┐
│ example.com                                         │
└─────────────────────────────────────────────────────┘

domainWithoutWWWRFC

自 v1.1 引入

返回去掉前缀 www. 的域名(若存在)。类似于 domainWithoutWWW,但符合 RFC 3986

语法

domainWithoutWWWRFC(url)

参数

返回值

如果输入字符串可以解析为 URL,则返回域名(不包含前缀 www.),否则返回空字符串。String

示例

用法示例

SELECT
    domainWithoutWWW('http://user:[email protected]:8080/path?query=value#fragment'),
    domainWithoutWWWRFC('http://user:[email protected]:8080/path?query=value#fragment');
┌─domainWithoutWWW('http://user:[email protected]:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:[email protected]:8080/path?query=value#fragment')─┐
│                                                                                         │ example.com                                                                                │
└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘

encodeURLComponent

引入版本:v22.3

接收一个常规字符串并将其转换为 URL 编码(百分号编码)格式,其中特殊字符会被替换为对应的百分号编码。

语法

encodeURLComponent(url)

参数

返回值

返回编码后的 URL。String

示例

用法示例

SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL;
┌─EncodedURL───────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │
└──────────────────────────────────────────────────────────┘

encodeURLFormComponent

引入版本:v22.3

使用表单编码规则(RFC-1866)对字符串进行编码,其中空格会被转换为加号 (+),特殊字符会被百分号编码。

语法

encodeURLFormComponent(url)

参数

返回值

返回编码后的 URL。String

示例

使用示例

SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL;
┌─编码后的 URL──────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │
└───────────────────────────────────────────────────────────┘

extractURLParameter

引入于:v1.1

返回 URL 中名为 name 的参数的值(如果存在),否则返回空字符串。
如果存在多个同名参数,则返回首次出现的值。
该函数假定 url 参数中的参数编码方式与传入 name 参数时使用的编码方式相同。

语法

extractURLParameter(url, name)

参数

返回值

返回 URL 中指定名称参数的值。String

示例

用法示例

SELECT extractURLParameter('http://example.com/?param1=value1&param2=value2', 'param1');
┌─extractURLPa⋯, 'param1')─┐
│ value1                   │
└──────────────────────────┘

extractURLParameterNames

自 v1.1 起引入

返回一个字符串数组,其中的每个字符串是一个 URL 参数的名称。 这些值不会被解码。

语法

extractURLParameterNames(url)

参数

返回值

返回一个字符串数组,包含 URL 参数的名称。Array(String)

示例

用法示例

SELECT extractURLParameterNames('http://example.com/?param1=value1&param2=value2');
┌─extractURLPa⋯m2=value2')─┐
│ ['param1','param2']      │
└──────────────────────────┘

extractURLParameters

自 v1.1 起可用

返回一个字符串数组,每个元素为对应 URL 参数的 name=value 形式。 参数值不会被解码。

语法

extractURLParameters(url)

参数

返回值

返回一个数组,其中每个元素都是与 URL 参数对应的 name=value 字符串。Array(String)

示例

用法示例

SELECT extractURLParameters('http://example.com/?param1=value1&param2=value2');
┌─extractURLParame⋯&param2=value2')─┐
│ ['param1=value1','param2=value2'] │
└───────────────────────────────────┘

firstSignificantSubdomain

引入版本:v

返回“首个重要子域名”。

如果二级域名是 'com'、'net'、'org' 或 'co',则首个重要子域名是对应的三级域名。 否则,首个重要子域名就是二级域名。

例如,firstSignificantSubdomain('https://news.clickhouse.com/') = 'clickhouse',firstSignificantSubdomain('https://news.clickhouse.com.tr/') = 'clickhouse'。

“不重要”的二级域名列表及其他实现细节在未来可能会发生变化。

语法

参数

  • 无。

返回值

示例

firstSignificantSubdomain

SELECT firstSignificantSubdomain('https://news.clickhouse.com/')

firstSignificantSubdomainRFC

自 v 版本引入。

根据 RFC 1034 返回“第一个重要子域名”。

语法

参数

返回值

示例

fragment

引入版本:v1.1

返回不带开头 # 号的片段标识符。

语法

片段(url)

参数

返回值

返回不包含开头井号符号(#)的片段标识符。String

示例

使用示例

SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service');
┌─fragment('http⋯ouse-service')─┐
│ 1-创建-ClickHouse-服务        │
└───────────────────────────────┘

netloc

自 v20.5 引入

从 URL 中提取网络定位部分(username:password@host:port)。

语法

netloc(url)

参数

返回值

从给定的 URL 中返回 username:password@host:portString

示例

使用示例

SELECT netloc('http://[email protected]:80/');
┌─netloc('http⋯e.com:80/')─┐
│ [email protected]:80  │
└──────────────────────────┘

path

自 v1.1 版本引入

返回 URL 中不包含查询字符串的路径。

语法

路径(网址)

参数

返回值

返回不包含查询字符串的 URL 路径部分。String

示例

用法示例

SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value');
┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐
│ /docs/sql-reference/functions/url-functions/                                         │
└──────────────────────────────────────────────────────────────────────────────────────┘

pathFull

自 v1.1 引入

path 相同,但还包括 URL 的查询字符串和片段。

语法

pathFull(url)

参数

返回值

返回 URL 的路径(包含查询字符串和片段)。String

示例

使用示例

SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section');
┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐
│ /docs/sql-reference/functions/url-functions/?query=value#section │
└──────────────────────────────────────────────────────────────────┘

port

自 v20.5 起引入

返回 URL 的端口号;如果 URL 不包含端口或无法解析,则返回 default_port

语法

port(url[, default_port])

参数

  • url — URL。String
  • default_port — 可选。要返回的默认端口号。默认值为 0UInt16

返回值

返回 URL 的端口;如果 URL 中没有端口或发生校验错误,则返回默认端口。UInt16

示例

使用示例

SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443);
┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐
│                                     8443 │                                      443 │
└──────────────────────────────────────────┴──────────────────────────────────────────┘

portRFC

引入版本:v22.10

返回 URL 中的端口号;如果 URL 不包含端口或无法解析,则返回 default_port。 类似于 port,但符合 RFC 3986 规范。

语法

portRFC(url[, default_port])

参数

  • url — URL。String
  • default_port — 可选。要返回的默认端口号,默认为 0UInt16

返回值

返回端口号;如果 URL 中没有端口或发生验证错误,则返回默认端口。UInt16

示例

用法示例

SELECT port('http://user:[email protected]:8080/'), portRFC('http://user:[email protected]:8080/');
┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐
│                        0 │                     8080 │
└──────────────────────────┴──────────────────────────┘

protocol

自 v1.1 版本引入

从 URL 中提取协议。

典型返回值示例:http、https、ftp、mailto、tel、magnet。

语法

协议(url)

参数

返回值

返回 URL 的协议;如果无法确定,则返回空字符串。String

示例

用法示例

SELECT protocol('https://clickhouse.com/');
┌─protocol('https://clickhouse.com/')─┐
│ https                               │
└─────────────────────────────────────┘

queryString

引入于:v1.1

返回 URL 的查询字符串,不包括开头的问号,以及 # 字符及其后所有内容。

语法

queryString(url)

参数

返回值

返回去掉开头问号和片段标识符后的 URL 查询字符串。String

示例

用法示例

SELECT queryString('https://clickhouse.com/docs?query=value&param=123#section');
┌─queryString(⋯3#section')─┐
│ query=value&param=123    │
└──────────────────────────┘

queryStringAndFragment

自 v1.1 引入

返回 URL 的查询字符串和片段标识符。

语法

queryStringAndFragment(url)

参数

返回值

返回 URL 的查询字符串和片段标识符。String

示例

用法示例

SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value&param=123#section');
┌─queryStringAnd⋯=123#section')─┐
│ query=value&param=123#section │
└───────────────────────────────┘

topLevelDomain

自 v1.1 起引入

从 URL 中提取顶级域名。

注意

URL 可以带协议或不带协议。 例如:

svn+ssh://some.svn-hosting.com:80/repo/trunk
some.svn-hosting.com:80/repo/trunk
https://clickhouse.com/time/

语法

顶级域名(url)

参数

返回值

如果输入字符串可以解析为 URL,则返回域名;否则返回空字符串。String

示例

用法示例

SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk');
┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐
│ com                                                                │
└────────────────────────────────────────────────────────────────────┘

topLevelDomainRFC

自 v22.10 版本引入

从 URL 中提取顶级域名部分。 类似于 topLevelDomain,但符合 RFC 3986

语法

topLevelDomainRFC(url)

参数

返回值

如果输入字符串可以解析为 URL,则返回该 URL 的域名,否则返回空字符串。String

示例

使用示例

SELECT topLevelDomain('http://foo:foo%[email protected]'), topLevelDomainRFC('http://foo:foo%[email protected]');
┌─topLevelDomain('http://foo:foo%[email protected]')─┬─topLevelDomainRFC('http://foo:foo%[email protected]')─┐
│                                                │ com                                               │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘