> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> URL を操作するための関数に関するドキュメント

# URL を操作するための関数

<div id="overview">
  ## 概要
</div>

<Note>
  このセクションで説明する関数は、最大限のパフォーマンスが得られるよう最適化されており、ほとんどの場合 RFC-3986 標準には準拠していません。
  RFC-3986 を実装する関数には、関数名の末尾に `RFC` が付き、一般に低速です。
</Note>

通常、ユーザー文字列や `@` 記号を含まない公開登録済みドメインを扱う場合は、`RFC` なしの関数バリアントを使用できます。
以下の表は、URL 内のどの記号を各 `RFC` および非 `RFC` バリアントで parse できるか (`✔`) またはできないか (`✗`) を示しています。

| Symbol | non-`RFC` | `RFC` |   |
| ------ | --------- | ----- | - |
| ' '    | ✗         | ✗     |   |
| \t     | ✗         | ✗     |   |
| \<     | ✗         | ✗     |   |
| >      | ✗         | ✗     |   |
| %      | ✗         | ✔\*   |   |
| \{     | ✗         | ✗     |   |
| }      | ✗         | ✗     |   |
|        |           | ✗     | ✗ |
| \\     | ✗         | ✗     |   |
| ^      | ✗         | ✗     |   |
| \~     | ✗         | ✔\*   |   |
| \[     | ✗         | ✗     |   |
| ]      | ✗         | ✔     |   |
| ;      | ✗         | ✔\*   |   |
| =      | ✗         | ✔\*   |   |
| &      | ✗         | ✔\*   |   |

`*` が付いた記号は、RFC 3986 ではサブ区切り文字であり、`@` 記号に続くユーザー情報で使用できます。

URL 関数には 2 種類あります。

* URL の一部を抽出する関数。該当する部分が URL に存在しない場合は、空文字列が返されます。
* URL の一部を削除する関数。URL に該当する部分がない場合、URL は変更されません。

<Note>
  以下の関数は、`system.functions` システムテーブルから生成されています。
</Note>

{/*AUTOGENERATED_START*/}

<div id="URLHierarchy">
  ## URLHierarchy
</div>

導入バージョン: v1.1.0

URL を含む配列を返します。この配列では、パスおよびクエリ文字列内の `/`、`?`、`#` を区切りとして末尾側から切り詰められます。連続する区切り文字は 1 つとして扱われます。結果の最初の要素にはプロトコルとホストが含まれ、以降はより長いパスが階層的に並びます。

**構文**

```sql theme={null}
URLHierarchy(url)
```

**引数**

* `url` — 処理対象の URL。[`String`](/ja/reference/data-types/string)

**戻り値**

階層を成す、段階的に長くなる URL の配列を返します。[`Array(String)`](/ja/reference/data-types/array)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT URLHierarchy('https://example.com/a/b?c=1')
```

```response title=Response theme={null}
['https://example.com/','https://example.com/a/','https://example.com/a/b','https://example.com/a/b?c=1']
```

<div id="URLPathHierarchy">
  ## URLPathHierarchy
</div>

導入バージョン: v1.1.0

URL のパス部分を含む配列を返します。この配列は、末尾を `/`、`?`、`#` の各記号で区切った形に切り詰められます。`URLHierarchy` とは異なり、結果にはプロトコルとホストは含まれず、パスから始まります。連続する区切り文字は 1 文字として扱われます。

**構文**

```sql theme={null}
URLPathHierarchy(url)
```

**引数**

* `url` — 処理対象の URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

階層構造を成す、URL パスの各部分を短いものから順に並べた配列を返します。 [`Array(String)`](/ja/reference/data-types/array)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT URLPathHierarchy('https://example.com/a/b?c=1')
```

```response title=Response theme={null}
['/a/','/a/b','/a/b?c=1']
```

<div id="cutFragment">
  ## cutFragment
</div>

導入バージョン: v1.1.0

URL から、# を含むフラグメント識別子を削除します。

**構文**

```sql theme={null}
cutFragment(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

フラグメント識別子を削除した URL を返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutFragment('http://example.com/path?query=value#fragment123');
```

```response title=Response theme={null}
┌─cutFragment('http://example.com/path?query=value#fragment123')─┐
│ http://example.com/path?query=value                            │
└────────────────────────────────────────────────────────────────┘
```

<div id="cutQueryString">
  ## cutQueryString
</div>

導入バージョン: v1.1.0

URL から、先頭の疑問符も含めてクエリ文字列を削除します。

**構文**

```sql theme={null}
cutQueryString(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

クエリ文字列を除いた URL を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutQueryString('http://example.com/path?query=value&param=123#fragment');
```

```response title=Response theme={null}
┌─cutQueryString('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path#fragment                                         │
└──────────────────────────────────────────────────────────────────────────┘
```

<div id="cutQueryStringAndFragment">
  ## cutQueryStringAndFragment
</div>

導入バージョン: v1.1.0

URLから、疑問符 (?) とシャープ記号 (#) を含むクエリ文字列およびフラグメント識別子を削除します。

**構文**

```sql theme={null}
cutQueryStringAndFragment(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

URL からクエリ文字列とフラグメント識別子を取り除いたものを返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment');
```

```response title=Response theme={null}
┌─cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path                                                             │
└─────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="cutToFirstSignificantSubdomain">
  ## cutToFirstSignificantSubdomain
</div>

導入バージョン: v1.1.0

ドメインのうち、[最初の有意なサブドメイン](/ja/reference/functions/regular-functions/url-functions#firstSignificantSubdomain)までのトップレベルサブドメインを含む部分を返します。

**構文**

```sql theme={null}
cutToFirstSignificantSubdomain(url)
```

**引数**

* `url` — 処理対象の URL またはドメイン文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

可能な場合は、トップレベルサブドメインから最初の有意なサブドメインまでを含むドメイン部分を返し、それ以外の場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomain('www.tr'),
    cutToFirstSignificantSubdomain('tr');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐
│ clickhouse.com.tr                                                 │ tr                                       │                                      │
└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘
```

<div id="cutToFirstSignificantSubdomainCustom">
  ## cutToFirstSignificantSubdomainCustom
</div>

導入バージョン: v21.1.0

最初の有意なサブドメインに至るまでのトップレベルサブドメインを含む、ドメインの部分を返します。カスタムの[TLD リスト](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains)名を指定できます。最新の TLD リストが必要な場合や、独自のリストがある場合に便利です。

**設定例**

```yaml theme={null}
<!-- <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 theme={null}
cutToFirstSignificantSubdomainCustom(url, tld_list_name)
```

**引数**

* `url` — 処理する URL またはドメイン文字列。 [`String`](/ja/reference/data-types/string)
* `tld_list_name` — ClickHouse で設定したカスタム TLD リストの名前。 [`const String`](/ja/reference/data-types/string)

**戻り値**

上位のサブドメインから最初の有意なサブドメインまでを含む、ドメインの一部を返します。 [`String`](/ja/reference/data-types/string)

**例**

**非標準ドメインでカスタム TLD リストを使用する**

```sql title=Query theme={null}
SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list')
```

```response title=Response theme={null}
foo.there-is-no-such-domain
```

<div id="cutToFirstSignificantSubdomainCustomRFC">
  ## cutToFirstSignificantSubdomainCustomRFC
</div>

導入バージョン: v22.10.0

最初の有意なサブドメインまでのトップレベルサブドメインを含む、ドメインの部分を返します。
カスタムの [TLD リスト](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains) 名を指定できます。
この関数は、最新の TLD リストが必要な場合や、独自のリストを使用している場合に便利です。
[cutToFirstSignificantSubdomainCustom](#cutToFirstSignificantSubdomainCustom) と似ていますが、RFC 3986 に準拠しています。

**設定例**

```xml theme={null}
<!-- <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 theme={null}
cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name)
```

**引数**

* `url` — RFC 3986 に従って処理される URL またはドメイン文字列。 - `tld_list_name` — ClickHouse で設定したカスタム TLD リストの名前。

**戻り値**

最初の有意なサブドメインまでのトップレベルサブドメインを含む、ドメインの部分を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘
```

<div id="cutToFirstSignificantSubdomainCustomWithWWW">
  ## cutToFirstSignificantSubdomainCustomWithWWW
</div>

導入バージョン: v21.1.0

`www` を削除せず、最初の有意なサブドメインまでのトップレベルサブドメインを含むドメイン部分を返します。カスタム TLD リスト名を受け取ります。最新の TLD リストが必要な場合や、カスタム リストを使用している場合に便利です。

**設定例**

````yaml theme={null}
<!-- <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>
    

**Syntax**

```sql
cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name)
````

**引数**

* `url` — 処理対象の URL またはドメイン文字列。 - `tld_list_name` — ClickHouse で設定したカスタム TLD リストの名前。

**戻り値**

`www` を削除せず、最初の意味のあるサブドメインまでのトップレベルサブドメインを含むドメインの一部。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘
```

<div id="cutToFirstSignificantSubdomainRFC">
  ## cutToFirstSignificantSubdomainCustomWithWWWRFC
</div>

導入バージョン: v22.10.0

`www` を削除せずに、最初の有意なサブドメインまでのトップレベルサブドメインを含むドメイン部分を返します。
カスタム TLD リスト名を受け取ります。
新しい TLD リストが必要な場合や、カスタム リストがある場合に役立ちます。
[cutToFirstSignificantSubdomainCustomWithWWW](#cutToFirstSignificantSubdomainCustomWithWWW) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**設定例**

````xml theme={null}
{/* <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>
    

**Syntax**

```sql
cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name)
````

**引数**

* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。 - `tld_list_name` — ClickHouse で設定したカスタム TLD リストの名前。

**戻り値**

`www` を削除せず、上位のサブドメインから最初の有意なサブドメインまでを含むドメイン部分を返します。[`String`](/ja/reference/data-types/string)

**例**

**カスタム TLD リストを使用して `www` を保持した RFC 3986 パース**

```sql title=Query theme={null}
SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list')
```

```response title=Response theme={null}
www.example.custom
```

<div id="cutToFirstSignificantSubdomainWithWWW">
  ## cutToFirstSignificantSubdomainRFC
</div>

導入バージョン: v22.10.0

トップレベルサブドメインから["最初の有意なサブドメイン"](/ja/reference/functions/regular-functions/url-functions#firstSignificantSubdomain)までを含むドメイン部分を返します。[`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
cutToFirstSignificantSubdomainRFC(url)
```

**引数**

* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

可能であれば、トップレベルサブドメインから最初の有意なサブドメインまでを含むドメイン部分を返します。そうでない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    cutToFirstSignificantSubdomain('http://user:password@example.com:8080'),
    cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomain('http://user:password@example.com:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080')─┐
│                                                                         │ example.com                                                                │
└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
```

<div id="cutToFirstSignificantSubdomainWithWWWRFC">
  ## cutToFirstSignificantSubdomainWithWWW
</div>

導入バージョン: v20.12.0

ドメインのうち、上位サブドメインから "最初の有意なサブドメイン" までを含む部分を返します。'[www](http://www).' は削除しません。

[`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain) と似ていますが、存在する場合は '[www](http://www).' プレフィックスを保持します。

**構文**

```sql theme={null}
cutToFirstSignificantSubdomainWithWWW(url)
```

**引数**

* `url` — 処理対象の URL またはドメイン文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

可能であれば、最初の有意なサブドメインまでのトップレベルサブドメイン (www を含む) を含むドメイン部分を返します。該当しない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomainWithWWW('www.tr'),
    cutToFirstSignificantSubdomainWithWWW('tr');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐
│ clickhouse.com.tr                                                        │ www.tr                                          │                                             │
└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘
```

<div id="cutURLParameter">
  ## cutToFirstSignificantSubdomainWithWWWRFC
</div>

導入バージョン: v22.10.0

`www` を削除せず、トップレベルサブドメインから「最初の有意なサブドメイン」までを含むドメイン部分を返します。[`cutToFirstSignificantSubdomainWithWWW`](#cutToFirstSignificantSubdomainWithWWW) に似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
cutToFirstSignificantSubdomainWithWWWRFC(url)
```

**引数**

* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。

**戻り値**

可能であれば、最初の有意なサブドメインまでを含むドメイン部分 (`www` を含むトップレベルサブドメインを含む) を返します。該当しない場合は、空文字列 [`String`](/ja/reference/data-types/string) を返します。

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'),
    cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy');
```

```response title=Response theme={null}
┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┐
│                                                                                       │ mail.ru                                                                                  │
└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="cutWWW">
  ## cutURLParameter
</div>

導入バージョン: v1.1.0

URL に `name` パラメータが含まれている場合は、それを削除します。
この関数は、パラメータ名の文字をエンコードまたはデコードしません。たとえば、`Client ID` と `Client%20ID` は別のパラメータ名として扱われます。

**構文**

```sql theme={null}
cutURLParameter(url, name)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)
* `name` — URL パラメータ名。 [`String`](/ja/reference/data-types/string) または [`Array(String)`](/ja/reference/data-types/array)

**戻り値**

`name` で指定した URL パラメータを削除した URL。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─url_without_a────────────────┬─url_without_c_and_e──────┐
│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │
└──────────────────────────────┴──────────────────────────┘
```

<div id="decodeURLComponent">
  ## cutWWW
</div>

導入バージョン: v1.1.0

URL のドメインの先頭に `www.` がある場合は、それを削除します。

**構文**

```sql theme={null}
cutWWW(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

ドメインから先頭の `www.` を除去した URL を返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT cutWWW('http://www.example.com/path?query=value#fragment');
```

```response title=Response theme={null}
┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐
│ http://example.com/path?query=value#fragment               │
└────────────────────────────────────────────────────────────┘
```

<div id="decodeURLFormComponent">
  ## decodeURLComponent
</div>

導入バージョン: v1.1.0

URLエンコードされた文字列を入力として受け取り、元の可読な形式に戻します。

**構文**

```sql theme={null}
decodeURLComponent(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

デコードしたURLを返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL;
```

```response title=Response theme={null}
┌─DecodedURL─────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1; │
└────────────────────────────────────────┘
```

<div id="domain">
  ## decodeURLFormComponent
</div>

導入バージョン: v1.1.0

フォームエンコーディングのルール ([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html)) に従って URL エンコードされた文字列をデコードします。このルールでは、`+` 記号は空白に変換され、パーセントエンコードされた文字はデコードされます。

**構文**

```sql theme={null}
decodeURLFormComponent(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

デコードされたURLを返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL;
```

```response title=Response theme={null}
┌─DecodedURL────────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │
└───────────────────────────────────────────┘
```

<div id="domainRFC">
  ## domain
</div>

導入バージョン: v1.1.0

URL からホスト名を抽出します。

URL は、プロトコルの有無にかかわらず指定できます。

**構文**

```sql theme={null}
domain(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列をURLとして解析できる場合はホスト名を返し、できない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk');
```

```response title=Response theme={null}
┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐
│ some.svn-hosting.com                                   │
└────────────────────────────────────────────────────────┘
```

<div id="domainWithoutWWW">
  ## domainRFC
</div>

導入バージョン: v22.10.0

URL からホスト名を抽出します。
[`domain`](#domain) に似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
domainRFC(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列を URL として解析できる場合はホスト名を返し、そうでない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    domain('http://user:password@example.com:8080/path?query=value#fragment'),
    domainRFC('http://user:password@example.com:8080/path?query=value#fragment');
```

```response title=Response theme={null}
┌─domain('http://user:password@example.com:8080/path?query=value#fragment')─┬─domainRFC('http://user:password@example.com:8080/path?query=value#fragment')─┐
│                                                                           │ example.com                                                                  │
└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘
```

<div id="domainWithoutWWWRFC">
  ## domainWithoutWWW
</div>

導入バージョン: v1.1.0

URL の先頭に `www.` がある場合、それを除いたドメインを返します。

**構文**

```sql theme={null}
domainWithoutWWW(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列をURLとして解釈できる場合はドメイン名 (先頭の `www.` を除く) を返し、そうでない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT domainWithoutWWW('http://paul@www.example.com:80/');
```

```response title=Response theme={null}
┌─domainWithoutWWW('http://paul@www.example.com:80/')─┐
│ example.com                                         │
└─────────────────────────────────────────────────────┘
```

<div id="encodeURLComponent">
  ## domainWithoutWWWRFC
</div>

導入バージョン: v1.1.0

先頭に `www.` が付いている場合は、それを除いたドメインを返します。[`domainWithoutWWW`](#domainWithoutWWW) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
domainWithoutWWWRFC(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列をURLとして解析できる場合はドメイン名 (先頭の `www.` を除く) を返し、そうでない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT
    domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment'),
    domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment');
```

```response title=Response theme={null}
┌─domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment')─┐
│                                                                                         │ example.com                                                                                │
└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="encodeURLFormComponent">
  ## encodeURLComponent
</div>

導入バージョン: v22.3.0

通常の文字列を受け取り、特殊文字を対応するパーセントエンコード表現に置き換えた URL エンコード (パーセントエンコード) 形式に変換します。

**構文**

```sql theme={null}
encodeURLComponent(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

エンコードされた URL を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL;
```

```response title=Response theme={null}
┌─EncodedURL───────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │
└──────────────────────────────────────────────────────────┘
```

<div id="extractURLParameter">
  ## encodeURLFormComponent
</div>

導入バージョン: v22.3.0

フォームエンコードの規則 ([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html)) に従って文字列をエンコードします。このとき、スペースは `+` 記号に変換され、特殊文字はパーセントエンコードされます。

**構文**

```sql theme={null}
encodeURLFormComponent(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

エンコードされたURLを返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL;
```

```response title=Response theme={null}
┌─EncodedURL────────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │
└───────────────────────────────────────────────────────────┘
```

<div id="extractURLParameterNames">
  ## extractURLParameter
</div>

導入バージョン: v1.1.0

URL に `name` パラメータが存在する場合はその値を返し、存在しない場合は空文字列を返します。
この名前のパラメータが複数ある場合は、最初に出現したものが返されます。
この関数は、`url` 引数内のパラメータが `name` 引数と同じ方法でエンコードされていることを前提としています。

**構文**

```sql theme={null}
extractURLParameter(url, name)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)
* `name` — パラメーター名。[`String`](/ja/reference/data-types/string)

**戻り値**

指定した名前の URL パラメーターの値を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT extractURLParameter('http://example.com/?param1=value1&param2=value2', 'param1');
```

```response title=Response theme={null}
┌─extractURLPa⋯, 'param1')─┐
│ value1                   │
└──────────────────────────┘
```

<div id="extractURLParameters">
  ## extractURLParameterNames
</div>

導入バージョン: v1.1.0

URLパラメータ名に対応する文字列の配列を返します。
値はデコードされません。

**構文**

```sql theme={null}
extractURLParameterNames(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

URLパラメータの名前に対応する文字列の配列を返します。[`Array(String)`](/ja/reference/data-types/array)

**例**

**使用例**

```sql title=Query theme={null}
SELECT extractURLParameterNames('http://example.com/?param1=value1&param2=value2');
```

```response title=Response theme={null}
┌─extractURLPa⋯m2=value2')─┐
│ ['param1','param2']      │
└──────────────────────────┘
```

<div id="firstSignificantSubdomain">
  ## extractURLParameters
</div>

導入バージョン: v1.1.0

URLパラメータに対応する `name=value` 形式の文字列の配列を返します。
値はデコードされません。

**Syntax**

```sql theme={null}
extractURLParameters(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

URL パラメータに対応する `name=value` 形式の文字列の配列を返します。 [`Array(String)`](/ja/reference/data-types/array)

**例**

**使用例**

```sql title=Query theme={null}
SELECT extractURLParameters('http://example.com/?param1=value1&param2=value2');
```

```response title=Response theme={null}
┌─extractURLParame⋯&param2=value2')─┐
│ ['param1=value1','param2=value2'] │
└───────────────────────────────────┘
```

<div id="firstSignificantSubdomainCustom">
  ## firstSignificantSubdomain
</div>

導入バージョン: v1.1.0

"最初の有意なサブドメイン" を返します。

最初の有意なサブドメイン は、'com'、'net'、'org'、または 'co' の場合は第2レベルドメインです。
それ以外の場合は、第3レベルドメインです。

たとえば、firstSignificantSubdomain('[https://news.clickhouse.com/\&#39](https://news.clickhouse.com/\&#39);) = 'clickhouse'、firstSignificantSubdomain ('[https://news.clickhouse.com.tr/\&#39](https://news.clickhouse.com.tr/\&#39);) = 'clickhouse' です。

"重要でない" 第2レベルドメインの一覧やその他の実装詳細は、将来変更される可能性があります。

**構文**

```sql theme={null}
firstSignificantSubdomain(url)
```

**引数**

* なし。

**戻り値**

**例**

**firstSignificantSubdomain**

```sql title=Query theme={null}
SELECT firstSignificantSubdomain('https://news.clickhouse.com/')
```

```response title=Response theme={null}
```

<div id="firstSignificantSubdomainCustomRFC">
  ## firstSignificantSubdomainCustom
</div>

導入バージョン: v21.1.0

カスタム TLD (トップレベルドメイン) リストを使用して、URL の最初の有意なサブドメインを返します。カスタム TLD リスト名は、どのドメイン接尾辞をトップレベルドメインとして扱うかを定義する設定を参照します。これは、非標準の TLD 階層で役立ちます。この関数は、プロトコルおよびそれ以降のすべてが取り除かれていることを前提とする、簡略化された URL パースアルゴリズムを使用します。

**構文**

```sql theme={null}
firstSignificantSubdomainCustom(url, tld_list_name)
```

**引数**

* `url` — サブドメインの抽出元となるURL。 [`String`](/ja/reference/data-types/string)
* `tld_list_name` — 設定内のカスタムTLDリストの名前。 [`String`](/ja/reference/data-types/string)

**戻り値**

最初の有意なサブドメインを返します。 [`String`](/ja/reference/data-types/string)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT firstSignificantSubdomainCustom('https://news.example.com', 'public_suffix_list')
```

```response title=Response theme={null}
example
```

<div id="firstSignificantSubdomainRFC">
  ## firstSignificantSubdomainCustomRFC
</div>

導入バージョン: v22.10.0

`firstSignificantSubdomainCustom` と似ていますが、簡略化されたアルゴリズムではなく、RFC 3986 に準拠した URL パースを使用します。

**構文**

```sql theme={null}
firstSignificantSubdomainCustomRFC(url, tld_list_name)
```

**引数**

* `url` — サブドメインを抽出する対象の URL。 [`String`](/ja/reference/data-types/string)
* `tld_list_name` — 設定内のカスタム TLD リストの名前。 [`String`](/ja/reference/data-types/string)

**戻り値**

最初の有意なサブドメインを返します。 [`String`](/ja/reference/data-types/string)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT firstSignificantSubdomainCustomRFC('https://news.example.com', 'public_suffix_list')
```

```response title=Response theme={null}
example
```

<div id="fragment">
  ## firstSignificantSubdomainRFC
</div>

導入バージョン: v22.10.0

RFC 1034 に従って「最初の有意なサブドメイン」を返します。

**構文**

```sql theme={null}
firstSignificantSubdomainRFC(url)
```

**引数**

* なし。

**戻り値**

**例**

<div id="netloc">
  ## fragment
</div>

導入バージョン: v1.1.0

先頭のハッシュ記号を除いたフラグメント識別子を返します。

**構文**

```sql theme={null}
fragment(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

先頭のハッシュ記号を除いたフラグメント識別子を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service');
```

```response title=Response theme={null}
┌─fragment('http⋯ouse-service')─┐
│ 1-create-a-clickhouse-service │
└───────────────────────────────┘
```

<div id="path">
  ## netloc
</div>

導入バージョン: v20.5.0

URL からネットワークロケーション (`username:password@host:port`) を抽出します。

**構文**

```sql theme={null}
netloc(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

指定したURLの `username:password@host:port` を返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT netloc('http://paul@www.example.com:80/');
```

```response title=Response theme={null}
┌─netloc('http⋯e.com:80/')─┐
│ paul@www.example.com:80  │
└──────────────────────────┘
```

<div id="pathFull">
  ## path
</div>

導入バージョン: v1.1.0

URLからクエリ文字列を除いたパスを返します。

**構文**

```sql theme={null}
path(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

クエリ文字列を含まないURLのパスを返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value');
```

```response title=Response theme={null}
┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐
│ /docs/sql-reference/functions/url-functions/                                         │
└──────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="port">
  ## pathFull
</div>

導入バージョン: v1.1.0

[`path`](#path) と同様ですが、URL のクエリ文字列とフラグメントも含みます。

**構文**

```sql theme={null}
pathFull(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

クエリ文字列とフラグメントを含む URL のパスを返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section');
```

```response title=Response theme={null}
┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐
│ /docs/sql-reference/functions/url-functions/?query=value#section │
└──────────────────────────────────────────────────────────────────┘
```

<div id="portRFC">
  ## port
</div>

導入バージョン: v20.5.0

URL のポートを返します。URL にポートが含まれていない場合、または解析できない場合は、`default_port` を返します。

**構文**

```sql theme={null}
port(url[, default_port])
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)
* `default_port` — 任意。返されるデフォルトのポート番号です。デフォルトは `0` です。[`UInt16`](/ja/reference/data-types/int-uint)

**戻り値**

URL のポートを返します。URL にポートがない場合、またはバリデーションエラーが発生した場合は、デフォルトのポートを返します。[`UInt16`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443);
```

```response title=Response theme={null}
┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐
│                                     8443 │                                      443 │
└──────────────────────────────────────────┴──────────────────────────────────────────┘
```

<div id="protocol">
  ## portRFC
</div>

導入バージョン: v22.10.0

URL にポートが含まれていない場合、または解析できない場合は、ポートまたは `default_port` を返します。
[`port`](#port) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
portRFC(url[, default_port])
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)
* `default_port` — 任意。返すデフォルトのポート番号です。既定値は `0` です。[`UInt16`](/ja/reference/data-types/int-uint)

**戻り値**

URL にポートが含まれない場合、または検証エラーが発生した場合は、ポート番号またはデフォルトのポート番号を返します。[`UInt16`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT port('http://user:password@example.com:8080/'), portRFC('http://user:password@example.com:8080/');
```

```response title=Response theme={null}
┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐
│                        0 │                     8080 │
└──────────────────────────┴──────────────────────────┘
```

<div id="queryString">
  ## protocol
</div>

導入バージョン: v1.1.0

URLからプロトコルを抽出します。

代表的な戻り値の例: http、https、ftp、mailto、tel、magnet。

**構文**

```sql theme={null}
protocol(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

URL のプロトコルを返します。判定できない場合は空文字列を返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT protocol('https://clickhouse.com/');
```

```response title=Response theme={null}
┌─protocol('https://clickhouse.com/')─┐
│ https                               │
└─────────────────────────────────────┘
```

<div id="queryStringAndFragment">
  ## queryString
</div>

導入バージョン: v1.1.0

URL のクエリ文字列から、先頭の疑問符、`#`、および `#` 以降のすべてを除いた文字列を返します。

**構文**

```sql theme={null}
queryString(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

先頭の疑問符とフラグメントを除いたURLのクエリ文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT queryString('https://clickhouse.com/docs?query=value&param=123#section');
```

```response title=Response theme={null}
┌─queryString(⋯3#section')─┐
│ query=value&param=123    │
└──────────────────────────┘
```

<div id="topLevelDomain">
  ## queryStringAndFragment
</div>

導入バージョン: v1.1.0

URL のクエリ文字列とフラグメント識別子を返します。

**構文**

```sql theme={null}
queryStringAndFragment(url)
```

**引数**

* `url` — URL。 [`String`](/ja/reference/data-types/string)

**戻り値**

URL のクエリ文字列とフラグメント識別子を返します。 [`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value&param=123#section');
```

```response title=Response theme={null}
┌─queryStringAnd⋯=123#section')─┐
│ query=value&param=123#section │
└───────────────────────────────┘
```

<div id="topLevelDomainRFC">
  ## topLevelDomain
</div>

導入バージョン: v1.1.0

URL からトップレベルドメインを抽出します。

<Note>
  URL はプロトコルの有無にかかわらず指定できます。
  例:

  ```text theme={null}
  svn+ssh://some.svn-hosting.com:80/repo/trunk
  some.svn-hosting.com:80/repo/trunk
  https://clickhouse.com/time/
  ```
</Note>

**構文**

```sql theme={null}
topLevelDomain(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列をURLとして解析できる場合は、ドメイン名を返します。解析できない場合は空文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk');
```

```response title=Response theme={null}
┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐
│ com                                                                │
└────────────────────────────────────────────────────────────────────┘
```

## topLevelDomainRFC

導入バージョン: v22.10.0

URL からトップレベルドメインを抽出します。
[`topLevelDomain`](#topLevelDomain) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。

**構文**

```sql theme={null}
topLevelDomainRFC(url)
```

**引数**

* `url` — URL。[`String`](/ja/reference/data-types/string)

**戻り値**

入力文字列を URL として解析できる場合はドメイン名、それ以外の場合は空文字列。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

```sql title=Query theme={null}
SELECT topLevelDomain('http://foo:foo%41bar@foo.com'), topLevelDomainRFC('http://foo:foo%41bar@foo.com');
```

```response title=Response theme={null}
┌─topLevelDomain('http://foo:foo%41bar@foo.com')─┬─topLevelDomainRFC('http://foo:foo%41bar@foo.com')─┐
│                                                │ com                                               │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘
```
