> ## 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>

Обычно варианты функций без `RFC` можно использовать при работе с общедоступными зарегистрированными доменами, которые не содержат ни пользовательской информации, ни символов `@`.
В таблице ниже показано, какие символы в URL могут (`✔`) или не могут (`✗`) быть разобраны соответствующими вариантами `RFC` и без `RFC`:

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

Символы, помеченные `*`, являются подразделителями в RFC 3986 и допустимы в пользовательской информации после символа `@`.

Существует два типа URL-функций:

* Функции, которые извлекают части URL. Если соответствующая часть в URL отсутствует, возвращается пустая строка.
* Функции, которые удаляют часть URL. Если в URL нет ничего подобного, он остается без изменений.

<Note>
  Приведенные ниже функции сгенерированы из системной таблицы `system.functions`.
</Note>

{/*AUTOGENERATED_START*/}

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

Добавленный в: v1.1.0

Возвращает массив, содержащий URL, усечённый справа по символам `/`, `?` и `#` в пути и строке запроса. Последовательные символы-разделители считаются одним. Результат включает протокол и хост в качестве первого элемента, а затем всё более длинные пути, образующие иерархию.

**Синтаксис**

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

**Аргументы**

* `url` — URL-адрес для обработки. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает массив URL-адресов, постепенно увеличивающихся по длине и образующих иерархию. [`Array(String)`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает массив всё более длинных компонентов пути URL-адреса, образующих иерархию. [`Array(String)`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает URL без идентификатора фрагмента. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает URL без строки запроса. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает URL без строки запроса и идентификатора фрагмента. [`String`](/ru/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

Возвращает часть домена, включающую поддомены верхнего уровня вплоть до [первого значимого поддомена](/ru/reference/functions/regular-functions/url-functions#firstSignificantSubdomain).

**Синтаксис**

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

**Аргументы**

* `url` — URL или строка домена для обработки. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня вплоть до первого значимого поддомена, если это возможно; в противном случае возвращает пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)
* `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse. [`const String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня до первого значимого поддомена. [`String`](/ru/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` — URL или доменное имя для обработки в соответствии с RFC 3986. - `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse.

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня до первого значимого поддомена. [`String`](/ru/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` — имя пользовательского списка TLD, настроенного в ClickHouse.

**Возвращаемое значение**

Часть домена, включающая поддомены верхнего уровня вплоть до первого значимого поддомена, без удаления 'www'. [`String`](/ru/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>
    {/* ПРИМЕЧАНИЕ: path указывается относительно top_level_domains_path */}
</top_level_domains_lists>
    

**Syntax**

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

**Аргументы**

* `url` — URL или строка домена, которые нужно обработать в соответствии с RFC 3986. - `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse.

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня до первого значимого поддомена, без удаления `www`. [`String`](/ru/reference/data-types/string)

**Примеры**

**Разбор по RFC 3986 с сохранением www и пользовательским списком TLD**

```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

Возвращает часть домена, включающую поддомены верхнего уровня вплоть до ["первого значимого поддомена"](/ru/reference/functions/regular-functions/url-functions#firstSignificantSubdomain). Аналогична [`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).

**Синтаксис**

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

**Аргументы**

* `url` — URL или строка домена для обработки в соответствии с RFC 3986. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня до первого значимого поддомена включительно, если это возможно; в противном случае возвращает пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня вплоть до первого значимого поддомена (вместе с www), если это возможно; в противном случае возвращает пустую строку. [`String`](/ru/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` — URL или строка домена для обработки в соответствии с RFC 3986.

**Возвращаемое значение**

Возвращает часть домена, включающую поддомены верхнего уровня до первого значимого поддомена (с 'www'), если это возможно; в противном случае возвращает пустую строку [`String`](/ru/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

Удаляет параметр `name` из URL, если такой параметр присутствует.
Эта функция не кодирует и не декодирует символы в именах параметров; например, `Client ID` и `Client%20ID` считаются разными именами параметров.

**Синтаксис**

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

**Аргументы**

* `url` — URL. [`String`](/ru/reference/data-types/string)
* `name` — имя параметра URL. [`String`](/ru/reference/data-types/string) или [`Array(String)`](/ru/reference/data-types/array)

**Возвращаемое значение**

URL без параметра `name`. [`String`](/ru/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

Удаляет начальный `www.` из домена URL, если он есть.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает URL без начального `www.` в домене. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает декодированный URL-адрес. [`String`](/ru/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

Декодирует URL-кодированные строки по правилам кодирования данных форм ([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html)): знаки `+` преобразуются в пробелы, а символы в процентной кодировке декодируются.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает декодированный URL-адрес. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает имя хоста, если входную строку можно интерпретировать как URL, в противном случае — пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает имя хоста, если входную строку можно разобрать как URL; в противном случае возвращает пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает доменное имя, если входную строку можно разобрать как URL (без префикса `www.`), в противном случае — пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает доменное имя, если входную строку можно разобрать как URL (без префикса `www.`), в противном случае — пустую строку. [`String`](/ru/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-кодированный формат (percent-encoding), в котором специальные символы заменяются их эквивалентами в процентной кодировке.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает URL в закодированном виде. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает URL в закодированном виде. [`String`](/ru/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

Возвращает значение параметра `name` в URL, если он присутствует; в противном случае возвращает пустую строку.
Если параметров с таким именем несколько, возвращается первое вхождение.
Функция предполагает, что параметр в аргументе `url` закодирован так же, как и в аргументе `name`.

**Синтаксис**

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

**Аргументы**

* `url` — URL. [`String`](/ru/reference/data-types/string)
* `name` — Имя параметра. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает значение параметра URL с заданным именем. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает массив строк с именами параметров URL. [`Array(String)`](/ru/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

Возвращает массив строк `name=value` с параметрами URL.
Значения не декодируются.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает массив строк вида `name=value`, соответствующих параметрам URL. [`Array(String)`](/ru/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'.
В противном случае это домен третьего уровня.

Например, 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'.

Список "незначимых" доменов второго уровня и другие подробности реализации в будущем могут измениться.

**Синтаксис**

```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

Возвращает первый значимый поддомен URL с использованием пользовательского списка TLD (доменов верхнего уровня). Имя пользовательского списка TLD указывает на конфигурацию, определяющую, какие суффиксы доменов следует считать доменами верхнего уровня. Это полезно для нестандартных иерархий TLD. Функция использует упрощённый алгоритм разбора URL, предполагающий, что протокол и всё, что следует за ним, уже удалены.

**Синтаксис**

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

**Аргументы**

* `url` — URL-адрес, из которого нужно извлечь поддомен. [`String`](/ru/reference/data-types/string)
* `tld_list_name` — Имя пользовательского списка TLD из конфигурации. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает первый значимый поддомен. [`String`](/ru/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`, но использует разбор URL в соответствии с RFC 3986 вместо упрощённого алгоритма.

**Синтаксис**

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

**Аргументы**

* `url` — URL-адрес, из которого нужно извлечь поддомен. [`String`](/ru/reference/data-types/string)
* `tld_list_name` — имя пользовательского списка TLD из конфигурации. [`String`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает первый значимый поддомен. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает идентификатор фрагмента без начального символа `#`. [`String`](/ru/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

Извлекает сетевой адрес (`username:password@host:port`) из URL.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает `username:password@host:port` из указанного URL. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает путь URL-адреса без строки запроса. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает путь URL-адреса, включая строку запроса и фрагмент. [`String`](/ru/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 или `default_port`, если URL не содержит порт или его не удалось разобрать.

**Синтаксис**

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

**Аргументы**

* `url` — URL. [`String`](/ru/reference/data-types/string)
* `default_port` — Необязательный параметр. Номер порта, возвращаемый по умолчанию. По умолчанию `0`. [`UInt16`](/ru/reference/data-types/int-uint)

**Возвращаемое значение**

Возвращает порт URL или порт по умолчанию, если в URL порт не указан или при ошибке валидации. [`UInt16`](/ru/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

Возвращает порт или `default_port`, если URL не содержит порта или его не удаётся разобрать.
Аналогично [`port`](#port), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).

**Синтаксис**

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

**Аргументы**

* `url` — URL. [`String`](/ru/reference/data-types/string)
* `default_port` — Необязательный параметр. Номер порта, возвращаемый по умолчанию. По умолчанию `0`. [`UInt16`](/ru/reference/data-types/int-uint)

**Возвращаемое значение**

Возвращает порт или порт по умолчанию, если URL не содержит порта или возникает ошибка валидации. [`UInt16`](/ru/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">
  ## протокол
</div>

Добавленный в: v1.1.0

Извлекает протокол из URL.

Примеры типичных возвращаемых значений: http, https, ftp, mailto, tel, magnet.

**Синтаксис**

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

**Аргументы**

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

**Возвращаемое значение**

Возвращает протокол URL или пустую строку, если определить его не удалось. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает строку запроса URL без начального знака вопроса и фрагмента. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает строку запроса и идентификатор фрагмента URL. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Возвращает имя домена, если входную строку можно разобрать как URL. В противном случае возвращает пустую строку. [`String`](/ru/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`](/ru/reference/data-types/string)

**Возвращаемое значение**

Доменное имя, если входную строку можно разобрать как URL. В противном случае — пустая строка. [`String`](/ru/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                                               │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘
```
