> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.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>

공개적으로 등록된 도메인을 다룰 때, 사용자 정보 문자열이나 `@` 기호가 포함되지 않았다면 일반적으로 non-`RFC` 함수 변형을 사용할 수 있습니다.
아래 표는 URL에서 각 `RFC` 및 non-`RFC` 변형이 어떤 기호를 파싱할 수 있는지(`✔`), 또는 파싱할 수 없는지(`✗`)를 보여줍니다.

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

`*`로 표시된 기호는 RFC 3986의 하위 구분 기호(sub-delimiters)이며, `@` 기호 뒤의 사용자 정보에 허용됩니다.

URL 함수에는 두 가지 타입이 있습니다.

* URL의 일부를 추출하는 함수입니다. URL에 해당 부분이 없으면 빈 문자열을 반환합니다.
* URL의 일부를 제거하는 함수입니다. URL에 해당하는 부분이 없으면 URL은 변경되지 않습니다.

<Note>
  아래 함수는 `system.functions` 시스템 테이블(system table)에서 생성됩니다.
</Note>

{/*AUTOGENERATED_START*/}

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

도입 버전: v1.1.0

경로와 쿼리 문자열에서 `/`, `?`, `#` 기호를 기준으로 URL의 끝부분을 잘라낸 값들을 담은 배열을 반환합니다. 연속된 구분자 문자는 하나로 간주됩니다. 결과의 첫 번째 요소에는 프로토콜과 호스트가 포함되며, 이후에는 점차 길어지는 경로가 계층 구조를 이룹니다.

**구문**

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

**인수**

* `url` — 처리할 URL입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

점차 더 긴 URL들로 계층 구조를 이루는 배열을 반환합니다. [`Array(String)`](/ko/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`와 달리 결과에는 프로토콜과 호스트가 포함되지 않으며, 경로부터 시작합니다. 연속된 구분자 문자는 하나로 간주됩니다.

**구문**

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

**인수**

* `url` — 처리할 URL입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

계층 구조를 이루는, 점차 길어지는 URL 경로 구성 요소의 배열을 반환합니다. [`Array(String)`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

프래그먼트 식별자를 제거한 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

쿼리 문자열이 제거된 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

쿼리 문자열과 프래그먼트 식별자를 제거한 URL을 반환합니다. [`String`](/ko/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

도메인에서 [첫 번째 유의미한 하위 도메인](/ko/reference/functions/regular-functions/url-functions#firstSignificantSubdomain)까지의 최상위 하위 도메인을 포함하는 부분을 반환합니다.

**구문**

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

**인수**

* `url` — 처리할 URL 또는 도메인 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

가능한 경우 최상위 하위 도메인부터 첫 번째 유의미한 하위 도메인까지 포함된 도메인 부분을 반환하며, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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>
    <!-- NOTE: 경로는 top_level_domains_path 하위에 있습니다 -->
</top_level_domains_lists>
```

**구문**

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

**인수**

* `url` — 처리할 URL 또는 도메인 문자열입니다. [`String`](/ko/reference/data-types/string)
* `tld_list_name` — ClickHouse에 구성된 사용자 지정 TLD 목록의 이름입니다. [`const String`](/ko/reference/data-types/string)

**반환 값**

최상위 하위 도메인부터 첫 번째 유의미한 하위 도메인까지 포함한 도메인 부분을 반환합니다. [`String`](/ko/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`](/ko/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>
    <!-- NOTE: 경로는 top_level_domains_path 아래에 있습니다 -->
</top_level_domains_lists>
    

**Syntax**

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

**인수**

* `url` — 처리할 URL 또는 도메인 문자열입니다. - `tld_list_name` — ClickHouse에 구성된 사용자 지정 TLD 목록의 이름입니다.

**반환 값**

`www`를 제거하지 않고, 첫 번째 유의미한 하위 도메인까지의 최상위 하위 도메인을 포함한 도메인 부분입니다. [`String`](/ko/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`](/ko/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

["첫 번째 유의미한 하위 도메인"](/ko/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`](/ko/reference/data-types/string)

**반환 값**

가능한 경우 최상위 하위 도메인부터 첫 번째 유의미한 하위 도메인까지 포함된 도메인 부분을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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.`를 제거하지 않고, 도메인에서 "유의미한 하위 도메인"까지의 최상위 하위 도메인을 포함한 부분을 반환합니다.

[`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain)과 유사하지만, `www.` 접두사가 있으면 그대로 유지합니다.

**구문**

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

**인수**

* `url` — 처리할 URL 또는 도메인 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

가능한 경우 최상위 하위 도메인부터 첫 번째 유의미한 하위 도메인까지(`www` 포함)의 도메인 부분을 반환하며, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/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`](/ko/reference/data-types/string)
* `name` — URL 매개변수의 이름. [`String`](/ko/reference/data-types/string) 또는 [`Array(String)`](/ko/reference/data-types/array)

**반환 값**

`name` URL 매개변수가 제거된 URL입니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

도메인 앞부분의 `www.`를 제거한 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

URL 디코딩된 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

디코딩된 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 호스트 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 호스트 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 도메인 이름(앞의 `www.` 제외)을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 도메인 이름(선행 `www.` 제외)을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

인코딩된 URL을 반환합니다. [`String`](/ko/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

문자열을 form 인코딩 규칙([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html))에 따라 인코딩합니다. 이 규칙에서는 공백이 + 기호로 변환되고 특수 문자는 퍼센트 인코딩됩니다.

**구문**

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

**인수**

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

**반환 값**

인코딩된 URL을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)
* `name` — 매개변수 이름입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

지정된 이름의 URL 매개변수 값을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

URL 매개변수 이름에 해당하는 문자열 배열을 반환합니다. [`Array(String)`](/ko/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` 형식의 문자열 배열을 반환합니다.
값은 디코딩되지 않습니다.

**구문**

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

**인수**

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

**반환 값**

URL 매개변수에 대응하는 `name=value` 문자열의 배열을 반환합니다. [`Array(String)`](/ko/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)
```

**인수**

* None.

**반환 값**

**예시**

**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 목록 이름은 어떤 도메인 접미사를 최상위 도메인으로 처리할지 정의하는 구성(configuration)을 가리킵니다. 이는 비표준 TLD 계층 구조를 다룰 때 유용합니다. 이 함수는 프로토콜과 그 뒤의 모든 내용이 제거되었다고 가정하는 단순화된 URL 파싱 알고리즘을 사용합니다.

**구문**

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

**인수**

* `url` — 하위 도메인을 추출할 URL입니다. [`String`](/ko/reference/data-types/string)
* `tld_list_name` — 구성에 정의된 사용자 지정 TLD 목록의 이름입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

첫 번째 유의미한 하위 도메인을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)
* `tld_list_name` — 구성에 정의된 사용자 지정 TLD 목록의 이름입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

첫 번째 유의미한 하위 도메인을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

앞의 해시 기호를 제외한 프래그먼트 식별자를 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

주어진 URL에서 `username:password@host:port`를 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

쿼리 문자열을 제외한 URL 경로를 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

쿼리 문자열과 프래그먼트를 포함한 URL 경로를 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)
* `default_port` — 선택 사항입니다. 반환할 기본 포트 번호입니다. 기본값은 `0`입니다. [`UInt16`](/ko/reference/data-types/int-uint)

**반환 값**

URL의 포트를 반환합니다. URL에 포트가 없거나 유효성 검사 오류가 발생하면 기본 포트를 반환합니다. [`UInt16`](/ko/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`](/ko/reference/data-types/string)
* `default_port` — 선택 사항입니다. 반환할 기본 포트 번호입니다. 기본값은 `0`입니다. [`UInt16`](/ko/reference/data-types/int-uint)

**반환 값**

URL에 포트가 없거나 유효성 검사 오류가 발생한 경우 포트 또는 기본 포트 번호를 반환합니다. [`UInt16`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

URL의 프로토콜을 반환하며, 이를 확인할 수 없으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

URL의 쿼리 문자열에서 앞의 물음표(?)와 프래그먼트를 제외한 값을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

URL의 쿼리 문자열과 프래그먼트 식별자를 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 도메인 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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`](/ko/reference/data-types/string)

**반환 값**

입력 문자열을 URL로 파싱할 수 있으면 도메인 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. [`String`](/ko/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                                               │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘
```
