- 类别:
:doc:`/sql-reference/functions-string`(通用)
PARSE_URL¶
返回一个 OBJECT 值,该值由有效输入 URL/URI 中的所有部分(片段、主机、参数、路径、端口、查询、方案)组成。
语法¶
PARSE_URL(<string>, [<permissive>])
实参¶
必填:
string
要解析的字符串。
可选:
permissive
确定如何处理解析错误的标志:
如果设置为
0
,则解析错误会导致函数失败。如果设置为
1
,则解析错误会导致具有error
字段的对象设置为相应的错误消息(并且未设置其他字段)。
默认值为
0
。
返回¶
该函数返回 OBJECT 类型的值。
如果任何输入实参为 NULL,则函数返回 NULL。
返回 OBJECT 值时,其中包含以下键值对:
键 |
值 |
---|---|
|
指向位置的锚点。 |
|
域(网站或服务器的地址)。 |
|
传递给网站或服务器的值。 |
|
资源的位置。 |
|
端口(进程或服务的连接端点)。 |
|
传递给网站或服务器的查询字符串。 |
|
协议。 |
示例¶
以下示例使用 PARSE_URL 函数。
解析表数据中的 URLs¶
创建表并插入行:
CREATE OR REPLACE TABLE parse_url_test (id INT, sample_url VARCHAR);
INSERT INTO parse_url_test VALUES
(1, 'mailto:abc@xyz.com'),
(2, 'https://www.snowflake.com/'),
(3, 'http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1'),
(4, NULL);
SELECT * FROM parse_url_test;
+----+----------------------------------------------------+
| ID | SAMPLE_URL |
|----+----------------------------------------------------|
| 1 | mailto:abc@xyz.com |
| 2 | https://www.snowflake.com/ |
| 3 | http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1 |
| 4 | NULL |
+----+----------------------------------------------------+
以下查询显示了示例 URLs 的 PARSE_URL 结果:
SELECT PARSE_URL(sample_url) FROM parse_url_test;
+------------------------------------+
| PARSE_URL(SAMPLE_URL) |
|------------------------------------|
| { |
| "fragment": null, |
| "host": null, |
| "parameters": null, |
| "path": "abc@xyz.com", |
| "port": null, |
| "query": null, |
| "scheme": "mailto" |
| } |
| { |
| "fragment": null, |
| "host": "www.snowflake.com", |
| "parameters": null, |
| "path": "", |
| "port": null, |
| "query": null, |
| "scheme": "https" |
| } |
| { |
| "fragment": null, |
| "host": "USER:PASS@EXAMPLE.INT", |
| "parameters": { |
| "USER": "1" |
| }, |
| "path": "HELLO.PHP", |
| "port": "4345", |
| "query": "USER=1", |
| "scheme": "http" |
| } |
| NULL |
+------------------------------------+
此查询显示了每个示例 URL 的主机:
SELECT PARSE_URL(sample_url):host FROM parse_url_test;
+----------------------------+
| PARSE_URL(SAMPLE_URL):HOST |
|----------------------------|
| null |
| "www.snowflake.com" |
| "USER:PASS@EXAMPLE.INT" |
| NULL |
+----------------------------+
返回端口为 4345
的行:
SELECT *
FROM parse_url_test
WHERE PARSE_URL(sample_url):port = '4345';
+----+----------------------------------------------------+
| ID | SAMPLE_URL |
|----+----------------------------------------------------|
| 3 | http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1 |
+----+----------------------------------------------------+
返回主机为 www.snowflake.com
的行:
SELECT *
FROM parse_url_test
WHERE PARSE_URL(sample_url):host = 'www.snowflake.com';
+----+----------------------------+
| ID | SAMPLE_URL |
|----+----------------------------|
| 2 | https://www.snowflake.com/ |
+----+----------------------------+
解析无效 URLs¶
解析缺少架构的无效 URL。将 permissive
实参设置为 0
,即表示如果输入无效,函数将失败:
SELECT PARSE_URL('example.int/hello.php?user=12#nofragment', 0);
100139 (22000): Error parsing URL: scheme not specified
解析无效 URL,通过将 permissive
实参设置为 1
,即表示函数返回包含错误消息的 OBJECT 值:
SELECT PARSE_URL('example.int/hello.php?user=12#nofragment', 1);
+----------------------------------------------------------+
| PARSE_URL('EXAMPLE.INT/HELLO.PHP?USER=12#NOFRAGMENT', 1) |
|----------------------------------------------------------|
| { |
| "error": "scheme not specified" |
| } |
+----------------------------------------------------------+