You need to enable JavaScript to run this app.
导航
IP & URL 函数
最近更新时间:2024.11.25 12:55:24首次发布时间:2022.02.28 12:33:07

IPv4NumToString

接受一个 UInt32 数字。将其解释为大端格式的 IPv4 地址。返回一个包含相应 IPv4 地址的字符串,格式为 ABCd(以点分隔的十进制数字)。
语法

IPv4NumToString(num)

参数

  • num– 一个 UInt32 数字。

返回值

  • 以 ipv4 表示的字符串。

示例

SELECT toIPv4('116.106.34.242') as ipv4, toTypeName(ipv4), IPv4NumToString(ipv4) as ipv4_string, toTypeName(ipv4_string)
┌─ipv4───────────┬─toTypeName(toIPv4('116.106.34.242'))─┬─ipv4_string────┬─toTypeName(IPv4NumToString(toIPv4('116.106.34.242')))─┐
│ 242.34.106.116 │ IPv4                                 │ 116.106.34.242 │ String                                                │
└────────────────┴──────────────────────────────────────┴────────────────┴───────────────────────────────────────────────────────┘

IPv4NumToStringClassC

与 类似IPv4NumToString,但使用 xxx 而不是最后一个八位字节。
语法

IPv4NumToStringClassC(num)

参数

  • num– 一个 UInt32 数字。

返回值

  • 以 ipv4 表示的字符串,但使用 xxx 而不是最后一个八位字节。

示例

SELECT toIPv4('116.106.34.242') as ipv4, toTypeName(ipv4), IPv4NumToStringClassC(ipv4) as ipv4_string, toTypeName(ipv4_string)
┌─ipv4───────────┬─toTypeName(toIPv4('116.106.34.242'))─┬─ipv4_string────┬─toTypeName(IPv4NumToStringClassC(toIPv4('116.106.34.242')))─┐
│ 242.34.106.116 │ IPv4                                 │ 116.106.34.xxx │ String                                                      │
└────────────────┴──────────────────────────────────────┴────────────────┴─────────────────────────────────────────────────────────────┘

IPv4StringToNum

IPv4NumToString 的逆函数。如果 IPv4 地址格式无效,则返回 0。
语法

IPv4StringToNum(s)

参数

  • s– 以字符串表示的 ipv4。

返回值

  • UInt32。

示例

SELECT IPv4StringToNum('116.106.34.242') as ipv4, toTypeName(ipv4), IPv4NumToString(ipv4) as ipv4_string, toTypeName(ipv4_string)
┌─ipv4───────┬─toTypeName(IPv4StringToNum('116.106.34.242'))─┬─ipv4_string────┬─toTypeName(IPv4NumToString(IPv4StringToNum('116.106.34.242')))─┐
│ 1953112818 │ UInt32                                        │ 116.106.34.242 │ String                                                         │
└────────────┴───────────────────────────────────────────────┴────────────────┴────────────────────────────────────────────────────────────────┘

IPv4ToIPv6

采用 UInt32 数字。将其解释为big endian的 IPv4 地址。返回包含二进制格式的 IPv6 地址的 FixedString(16) 值。
语法

IPv4ToIPv6(x)

参数

  • x一个UInt32号码

返回值

  • 二进制格式的 IPv6 地址.FixedString(16)

示例

SELECT IPv4StringToNum('192.168.0.1') as ipv4, IPv6NumToString(IPv4ToIPv6(ipv4)) as ipv6_string
┌─ipv4───────┬─ipv6_string────────┐
│ 3232235521 │ ::ffff:192.168.0.1 │
└────────────┴────────────────────┘

IPv6NumToString

接受包含二进制格式的 IPv6 地址的 FixedString(16) 值。返回包含此地址的文本格式的字符串。
IPv6 映射的 IPv4 地址以 ::ffff:111.222.33.44 格式输出。
语法

IPv6NumToString(x)

参数

  • x– FixedString(16) 值包含二进制格式的 IPv6 地址

返回值

  • 以 IPv6 表示的字符串。

示例

SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr;
┌─addr─────────┐
│ 2a02:6b8::11 │
└──────────────┘

IPv6StringToNum

的反向函数IPv6NumToString。如果 IPv6 地址格式无效,则返回一个空字节字符串。
如果输入字符串包含有效的 IPv4 地址,则返回其 IPv6 等效值。HEX可以是大写或小写。
语法

IPv6StringToNum(string)

争论

  • string— IP 地址。字符串。

返回值

  • 二进制格式的 IPv6 地址。类型:FixedString(16)。

示例

SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['notaddress', '127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr;
┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐
│ notaddress │ ::                                   │
│ 127.0.0.1  │ ::                                   │
│ 1111::ffff │ 1111::ffff                           │
└────────────┴──────────────────────────────────────┘

cutIPv6

接受包含二进制格式的 IPv6 地址的 FixedString(16) 值。返回以文本格式包含已删除指定字节数的地址的字符串。
语法

cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4)

参数

  • x– 包含二进制格式的 IPv6 地址的 FixedString(16) 值
  • bytesToCutForIPv6为 IPv6 表示而剪切的字节数
  • bytesToCutForIPv4为 IPv4 表示而剪切的字节数

返回值
AUint64数据类型哈希值。
类型:UInt64
示例

WITH
    IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6,
    IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4
SELECT
    cutIPv6(ipv6, 2, 0),
    cutIPv6(ipv4, 0, 2)
┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐
│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0  │
└─────────────────────────────────────┴─────────────────────┘

toIPv4

的别名IPv4StringToNum()采用 IPv4 地址的字符串形式并返回 IPv4 类型的值,该值是二进制的,等于 返回的值IPv4StringToNum()
语法

toIPv4(string)

争论

  • string— IP 地址。字符串。

返回值

  • IPv4 类型

示例

WITH'171.225.130.45' as IPv4_string
SELECT
    toTypeName(IPv4StringToNum(IPv4_string)),
    toTypeName(toIPv4(IPv4_string))
┌─toTypeName(IPv4StringToNum(IPv4_string))─┬─toTypeName(toIPv4(IPv4_string))─┐
│ UInt32                                   │ IPv4                            │
└──────────────────────────────────────────┴─────────────────────────────────┘
WITH'171.225.130.45' as IPv4_string
SELECT
    hex(IPv4StringToNum(IPv4_string)),
    hex(toIPv4(IPv4_string))
┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐
│ ABE1822D                          │ ABE1822D                 │
└───────────────────────────────────┴──────────────────────────┘

toIPv6

将字符串形式的 IPv6 地址转换为 IPv6 类型。如果 IPv6 地址格式无效,则返回空值。
类似于 IPv6StringToNum 函数,将 IPv6 地址转换为二进制格式。
语法

toIPv6(string)

争论

  • string— IP 地址。字符串

返回值

  • IP 地址。类型:IPv6。

示例

WITH '2001:438:ffff::407d:1bc1' AS IPv6_string
SELECT
    hex(IPv6StringToNum(IPv6_string)),
    hex(toIPv6(IPv6_string));
┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐
│ 20010438FFFF000000000000407D1BC1  │ 20010438FFFF000000000000407D1BC1 │
└───────────────────────────────────┴──────────────────────────────────┘

URLHierarchy

返回包含 URL 的数组,在路径和查询字符串的末尾被符号 /,? 截断。连续的分隔符算作一个。截断在所有连续分隔符之后的位置进行。
语法

URLHierarchy(URL)

参数

  • URL— URL。类型:字符串。

返回值

  • 包含 URL 的数组

示例

SELECT URLHierarchy('https://example.com/browse/CONV-6788');
┌─URLHierarchy('https://example.com/browse/CONV-6788')────────────────────────────────────────────┐
│ ['https://example.com/', 'https://example.com/browse/', 'https://example.com/browse/CONV-6788'] │
└─────────────────────────────────────────────────────────────────────────────────────────────────┘

URLPathHierarchy

与上文相同,但结果中不包含protocol和host。不包含 / 元素(root)。
语法

URLPathHierarchy(URL)

参数

  • URL— URL。类型:字符串。

返回值

  • 包含 URL 的数组

示例

SELECT URLPathHierarchy('https://example.com/browse/CONV-6788');
┌─URLPathHierarchy('https://example.com/browse/CONV-6788')─┐
│ ['/browse/', '/browse/CONV-6788']                        │
└──────────────────────────────────────────────────────────┘

cutFragment

删除片段标识符。数字符号也被删除。
语法

cutFragment(URL)

参数

  • URL– url 字符串

返回值

  • 不包含片段的 URL

示例

SELECT cutFragment('http://example.com#fragment')
┌─cutFragment('http://example.com#fragment')─┐
│ http://example.com                         │
└────────────────────────────────────────────┘

cutQueryString

删除查询字符串。问号也被删除。
语法

cutQueryString(URL)

参数

  • URL– url 字符串

返回值

  • 不带查询的 url

示例

SELECT cutQueryString('http://example.com/?page=1&lr=213')
┌─cutQueryString('http://example.com/?page=1&lr=213')─┐
│ http://example.com/                                 │
└─────────────────────────────────────────────────────┘

cutQueryStringAndFragment

删除查询字符串和片段标识符。问号和数字符号也被删除。
语法

cutQueryStringAndFragment(URL)

参数

  • URL– url 字符串

返回值

  • 不包含查询字符串和片段的 url 字符串

示例

SELECT cutQueryStringAndFragment('http://example.com/?page=1&lr=213#fragment')
┌─cutQueryStringAndFragment('http://example.com/?page=1&lr=213#fragment')─┐
│ http://example.com/                                                     │
└─────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomain

返回包含顶级子域名直至“第一个重要子域名”的域名部分。
语法

cutToFirstSignificantSubdomain(URL)

参数

  • URL– url 字符串

返回值

  • 子域名字符串

示例

SELECT cutToFirstSignificantSubdomain('https://www.example.com.cn/')
┌─cutToFirstSignificantSubdomain('https://www.example.com.cn/')─┐
│ example.com.cn                                                │
└───────────────────────────────────────────────────────────────┘

cutURLParameter

删除“name”URL 参数(如果存在)。此函数的工作原理是假设 URL 中的参数名称的编码方式与传递的参数中的编码方式完全相同。
语法

cutURLParameter(URL, name)

参数

  • URL– url 字符串
  • name参数名称

返回值

  • url 字符串

示例

SELECT cutURLParameter('http://example.com/?page=1&lr=213','page')
┌─cutURLParameter('http://example.com/?page=1&lr=213', 'page')─┐
│ http://example.com/?lr=213                                   │
└──────────────────────────────────────────────────────────────┘

cutWWW

如果存在,则从 URL 域名的开头删除最多一个“www.”
语法

cutWWW(URL)

参数

  • URL– url 字符串
  • name参数名称

返回值

  • url 字符串

示例

SELECT cutWWW('http://www.example.com/?page=1&lr=213')
┌─cutWWW('http://www.example.com/?page=1&lr=213')─┐
│ http://example.com/?page=1&lr=213               │
└─────────────────────────────────────────────────┘

decodeURLComponent

返回解码后的 URL。
语法

decodeURLComponent(URL) 

参数

  • URL– url 字符串

返回值

  • 解码后的 URL 字符串

示例

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

domain

从 URL 中提取主机名。
语法

domain(url)

参数

  • url— URL。类型:字符串。URL

可以指定或不指定方案。示例:

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

对于这些示例,该domain函数返回以下结果:

some.svn-hosting.com
some.svn-hosting.com
yandex.com

返回值

  • 主机名。如果 ByteHouse 可以将输入字符串解析为 URL。
  • 空字符串。如果 ByteHouse 无法将输入字符串解析为 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                                   │
└────────────────────────────────────────────────────────┘

domainWithoutWWW

返回域名并从其开头删除最多一个“www.” (如果存在)。
语法

domainWithoutWWW(url)

参数

  • url— URL。类型:字符串。

返回值

  • 主机名。如果 ByteHouse 可以将输入字符串解析为 URL。
  • 空字符串。如果 ByteHouse 无法将输入字符串解析为 URL。

类型:String
示例

SELECT domainWithoutWWW('http://www.example.com#fragment');
┌─domainWithoutWWW('http://www.example.com#fragment')─┐
│ example.com                                         │
└─────────────────────────────────────────────────────┘

extractURLParameter

返回 URL 中“name”参数的值(如果存在)。否则返回空字符串。如果有许多同名参数,则返回第一个。此函数的工作原理是假设 URL 中的参数名称编码方式与传递的参数中的编码方式完全相同。
语法

extractURLParameter(URL, name)

参数

  • URL– url 字符串
  • name参数名称

返回值

  • 参数值

示例

SELECT extractURLParameter('http://example.com/?page=1&lr=213','page')
┌─extractURLParameter('http://example.com/?page=1&lr=213', 'page')─┐
│ 1                                                                │
└──────────────────────────────────────────────────────────────────┘

extractURLParameterNames

返回与 URL 参数名称对应的名称字符串数组。值不会以任何方式解码。
语法

extractURLParameterNames(URL)

参数

  • URL– url 字符串

返回值

  • 参数名称列表

示例

SELECT extractURLParameterNames('http://example.com/?page=1&lr=213')
┌─extractURLParameterNames('http://example.com/?page=1&lr=213')─┐
│ ['page', 'lr']                                                │
└───────────────────────────────────────────────────────────────┘

extractURLParameters

返回与 URL 参数对应的 name=value 字符串数组。这些值不会以任何方式解码。
语法

extractURLParameters(URL)

参数

  • URL– url 字符串

返回值

  • 参数列表

示例

SELECT extractURLParameters('http://example.com/?page=1&lr=213')
┌─extractURLParameters('http://example.com/?page=1&lr=213')─┐
│ ['page=1', 'lr=213']                                      │
└───────────────────────────────────────────────────────────┘

firstSignificantSubdomain

返回“第一个重要子域名”。这是 Yandex.Metrica 特有的非标准概念。如果第一个重要子域名是“com”、“net”、“org”或“co”,则它是二级域名。否则,它是三级域名。
语法

firstSignificantSubdomain(URL)

参数

  • URL– url 字符串

返回值

  • 第一个重要子域名

示例

SELECT firstSignificantSubdomain('https://www.example.com.cn/')
┌─firstSignificantSubdomain('https://www.example.com.cn/')─┐
│ example                                                  │
└──────────────────────────────────────────────────────────┘

fragment

返回片段标识符。片段不包括初始井号。
语法

fragment(URL)

参数

  • URL– url 字符串

返回值

  • 片段字符串

示例

SELECT fragment('http://example.com#fragment')
┌─fragment('http://example.com#fragment')─┐
│ fragment                                │
└─────────────────────────────────────────┘

path

返回路径。示例:/top/news.html路径不包含查询字符串。
语法

path(URL)

参数

  • URL– url 字符串

返回值

  • 路径字符串

示例

SELECT path('http://example.com/top/news.html')
┌─path('http://example.com/top/news.html')─┐
│ /top/news.html                           │
└──────────────────────────────────────────┘

protocol

从 URL 中提取协议。
典型返回值示例:http、https、ftp、mailto、tel、magnet…
语法

protocol(URL)

参数

  • URL– url 字符串

返回值

  • 协议字符串

示例

SELECT protocol('http://example.com')
┌─protocol('http://example.com')─┐
│ http                           │
└────────────────────────────────┘

queryString

返回查询字符串。示例:page=1&lr=213。查询字符串不包括初始问号、# 以及 # 之后的所有内容。
语法

queryString(URL)

参数

  • URL– url 字符串

返回值

  • 请求参数

示例

SELECT queryString('http://example.com/?page=1&lr=213')
┌─queryString('http://example.com/?page=1&lr=213')─┐
│ page=1&lr=213                                    │
└──────────────────────────────────────────────────┘

queryStringAndFragment

返回查询字符串和片段标识符。示例:page=1#29390。
语法

queryStringAndFragment(URL)

参数

  • URL– url 字符串

返回值

  • 查询和片段字符串

示例

SELECT queryStringAndFragment('http://example.com/?page=1&lr=213#fragment')
┌─queryStringAndFragment('http://example.com/?page=1&lr=213#fragment')─┐
│ page=1&lr=213#fragment                                               │
└──────────────────────────────────────────────────────────────────────┘

topLevelDomain

从 URL 中提取顶级域名。
语法

topLevelDomain(url)

参数

  • url— URL。类型:字符串。URL

可以指定或不指定方案。示例:

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

返回值

  • 域名。如果 ByteHouse 可以将输入字符串解析为 URL。
  • 空字符串。如果 ByteHouse 无法将输入字符串解析为 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                                                                │
└────────────────────────────────────────────────────────────────────┘