Текстовые функции

Текстовые функции — это функции для работы с текстовыми строками (данными типа VARCHAR).

array_extract()

Описание

Извлекает символ из указанной строки или элемент из указанного списка.

Использование

array_extract(list, index)

Извлекает символ из указанной строки или элемент из указанного списка по заданному индексу. Для индекса допускаются отрицательные значения.

Нумерация элементов начинается с 1.
Посмотреть пример
SELECT
    array_extract('Tengri', 1)  AS result_1,
    array_extract('Tengri', 3)  AS result_2,
    array_extract('Tengri', -1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| T        | n        | i        |
+----------+----------+----------+
SELECT
    array_extract([1,2,3,4], 1)  AS result_1,
    array_extract([1,2,3,4], 3)  AS result_2,
    array_extract([1,2,3,4], -1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1        | 3        | 4        |
+----------+----------+----------+

array_slice()

Описание

Извлекает подстроку из указанной строки или список из указанного списка.

Использование

array_slice(list, begin, end)

Псевдонимы

list_slice()

Извлекает подстроку из указанной строки или список из указанного списка по заданным координатам начала и конца. Для координат допускаются отрицательные значения.

Нумерация элементов начинается с 1.
Посмотреть пример
SELECT
    array_slice('Tengri', 3, 4)  AS result_1,
    array_slice('Tengri', 0, 1)  AS result_2,
    array_slice('Tengri', 0, -2) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| ng       | T        | Tengr    |
+----------+----------+----------+
SELECT
    array_slice([1,2,3,4], 3, 4)  AS result_1,
    array_slice([1,2,3,4], 0, 1)  AS result_2,
    array_slice([1,2,3,4], 0, -2) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| {3,4}    | {1}      | {1,2,3}  |
+----------+----------+----------+

bar()

Описание

Рисует полосу в высоту строки.

Использование

bar(x, min, max[, width])

Рисует черную полосу в высоту строки. Длина полосы пропорциональна x - min и равна width, когда x = max.

По умолчанию width = 80.

Удобно использовать для имитации отображения шкалы в текстовом виде.
Посмотреть пример
SELECT
    t.generate_series AS value,
    bar(t.generate_series, 0, 5, 10) AS progress_bar
FROM generate_series(0, 5) AS t;
+-------+--------------+
| value | progress_bar |
+-------+--------------+
| 0     |              |
+-------+--------------+
| 1     | ██           |
+-------+--------------+
| 2     | ████         |
+-------+--------------+
| 3     | ██████       |
+-------+--------------+
| 4     | ████████     |
+-------+--------------+
| 5     | ██████████   |
+-------+--------------+

bin()

Описание

Конвертирует каждый символ строки в его бинарное представление.

Использование

bin(string)

Посмотреть пример
SELECT
    bin('T') AS result_1,
    bin('t') AS result_2,
    bin(' ') AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 01010100 | 01110100 | 00100000 |
+----------+----------+----------+

chr()

Описание

Возвращает символ, соответствующий значению кода ASCII или кода Unicode, заданному в argument.

Использование

chr(argument)

Посмотреть пример
SELECT
    chr(84) || chr(78) || chr(71) || chr(82) || chr(105) AS chr;
+-------+
|  chr  |
+-------+
| TNGRi |
+-------+

concat()

Описание

Конкатенирует несколько строк, массивов или двоичных значений.

Использование

concat(argument1, argument2, ...)

Пустые значения (NULL) игнорируются.

См. также Оператор ||.

Посмотреть пример
SELECT
    concat('\xAA'::BLOB, '\xff'::BLOB)          AS result_blob,
    concat('I', ' ', 'love', ' ', 'Tengri')     AS result_string,
    concat(['T', 'e'], ['n', 'g', 'r', 'i'])    AS result_array;
+-------------+---------------+---------------+
| result_blob | result_string |  result_array |
+-------------+---------------+---------------+
| \xAA\xFF    | I love Tengri | {T,e,n,g,r,i} |
+-------------+---------------+---------------+

concat_ws()

Описание

Конкатенирует строки через разделитель.

Использование

concat_ws(separator, string1, string2, ...)

Конкатенирует несколько строк через заданный разделитель.

Если в качестве строки передается значение NULL, то оно игнорируются. Если передана одна строка, то возвращается она же без добавления разделителя.

Посмотреть пример
SELECT
    concat_ws(' ', 'I', 'love', 'Tengri')       AS result_1,
    concat_ws(' ', 'I', NULL, 'love', 'Tengri') AS result_2,
    concat_ws('!', 'Tengri')                    AS result_3;
+---------------+---------------+----------+
| result_1      | result_2      | result_3 |
+---------------+---------------+----------+
| I love Tengri | I love Tengri | Tengri   |
+---------------+---------------+----------+

contains()

Описание

Возвращает true, если в указанной строке string содержится искомая подстрока search_string.

Использование

contains(string, search_string)

Посмотреть пример
SELECT
    contains('I love Tengri', 'Tengri') AS check_name,
    contains('I love Tengri', 'TNGRi')  AS check_nickname;
+------------+----------------+
| check_name | check_nickname |
+------------+----------------+
| true       | false          |
+------------+----------------+

ends_with()

Описание

Возвращает true, если строка заканчивается искомой строкой.

Использование

ends_with(string, search_string)

Псевдонимы

suffix

Посмотреть пример
SELECT
    ends_with('I love Tengri', 'I')      AS result_1,
    ends_with('I love Tengri', 'Tengri') AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| false    | true     |
+----------+----------+

format()

Описание

Форматирует строку, используя синтаксис fmt.

Использование

format(string, ...)

Форматирует строку, используя синтаксис fmt.

Посмотреть пример
SELECT
    format('I love {}', 'Tengri')         AS result_1,
    format('{0} love {1}', 'I','Tengri' ) AS result_2,
    format('Today is {}', today())        AS result_3;
+---------------+---------------+---------------------+
| result_1      | result_2      | result_3            |
+---------------+---------------+---------------------+
| I love Tengri | I love Tengri | Today is 2026-05-06 |
+---------------+---------------+---------------------+

greatest()

Описание

Возвращает наибольший аргумент из указанных.

Использование

greatest(argument[, argument, ...])

  • При использовании с числами возвращает наибольшее число.

  • При использовании с текстовыми строками — возвращает последнюю из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.

  • При использовании с типами для даты и времени — возвращает самый поздний объект.

Посмотреть примеры
SELECT
    greatest(1, 2, 3, 4, 4) AS result_1,
    greatest(1, -1)         AS result_2,
    greatest(0)             AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4        | 1        | 0        |
+----------+----------+----------+
SELECT
    greatest('a', 'z', 'A', 'Z') AS result_1,
    greatest('Tengri', 'TNGRi')  AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| z        | Tengri   |
+----------+----------+
SELECT
    greatest(DATE '2024-02-29', TIMESTAMP '2024-02-29 00:00:01') AS result_1,
    greatest(DATE '2024-02-29', DATE '2029-02-24')               AS result_2,
    greatest(DATE '2024-02-29', now())                           AS result_3;
+---------------------+------------+----------------------------------+
| result_1            | result_2   | result_3                         |
+---------------------+------------+----------------------------------+
| 2024-02-29T00:00:01 | 2029-02-24 | 2026-05-06T13:05:46.173330+03:00 |
+---------------------+------------+----------------------------------+

least()

Описание

Возвращает наименьший аргумент из указанных.

Использование

least(argument[, argument, ...])

  • При использовании с числами возвращает наименьшее число.

  • При использовании с текстовыми строками — возвращает первую из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.

  • При использовании с типами для даты и времени — возвращает самый ранний объект.

Посмотреть примеры
SELECT
    least(1, 1, 2, 3, 4) AS result_1,
    least(1, -1)         AS result_2,
    least(0)             AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1        | -1       | 0        |
+----------+----------+----------+
SELECT
    least(DATE '2024-02-29', TIMESTAMP '2024-02-29 00:00:01') AS result_1,
    least(DATE '2024-02-29', DATE '2029-02-24')               AS result_2,
    least(DATE '2024-02-29', now())                           AS result_3;
+---------------------+------------+---------------------------+
| result_1            | result_2   | result_3                  |
+---------------------+------------+---------------------------+
| 2024-02-29T00:00:00 | 2024-02-29 | 2024-02-29T00:00:00+03:00 |
+---------------------+------------+---------------------------+
SELECT
    least('a', 'z', 'A', 'Z') AS result_1,
    least('Tengri', 'TNGRi')  AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| A        | TNGRi    |
+----------+----------+

left()

Описание

Извлекает из строки подстроку заданной длины, начиная с левого края.

Использование

left(string, length)

Посмотреть пример
SELECT
    left('I love Tengri', 6)   AS result_1,
    left('I love Tengri', 100) AS result_2;
+----------+---------------+
| result_1 | result_2      |
+----------+---------------+
| I love   | I love Tengri |
+----------+---------------+

length()

Описание

Возвращает количество символов в строке.

Использование

length(string)

Псевдонимы

char_length(), character_length()

Посмотреть пример
SELECT
    length('I love Tengri 💙') AS length;
+--------+
| length |
+--------+
| 15     |
+--------+

lower()

Описание

Преобразует строку в нижний регистр.

Использование

lower(string)

Псевдонимы

lcase()

Посмотреть пример
SELECT
    lower('TNGRi') AS lower;
+-------+
| lower |
+-------+
| tngri |
+-------+

ltrim()

Описание

Удаляет все вхождения любого из указанных символов в начале строки.

Использование

ltrim(string[, characters])

Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.

Посмотреть примеры
SELECT
    '"' || ltrim(' Tengri ') || '"' AS ltrim;
+-----------+
|   ltrim   |
+-----------+
| "Tengri " |
+-----------+
SELECT
    ltrim('{{([Tengri])}}', '{([])}') AS ltrim_brackets;
+----------------+
| ltrim_brackets |
+----------------+
| Tengri])}}     |
+----------------+

md5()

Описание

Возвращает хеш MD5 данных из argument в виде строки (VARCHAR).

Использование

md5(argument)

В argument могут быть двоичные данные или строка.

Посмотреть примеры
SELECT
    md5('\xAA\xFF'::BLOB) as md5_hash;
+----------------------------------+
|             md5_hash             |
+----------------------------------+
| 1fab7f7621f5ddc051ebd1f2c63c4665 |
+----------------------------------+
SELECT
    md5('Tengri') as md5_hash;
+----------------------------------+
|             md5_hash             |
+----------------------------------+
| 846b02d31131a10bd6ac0ba189c65bef |
+----------------------------------+

parse_filename()

Описание

Возвращает имя файла по указанному пути.

Использование

parse_filename(string[, trim_extension][, separator])

Возвращает имя файла по указанному пути — последний элемент пути.

Если trim_extension равно true, расширение файла удаляется (по умолчанию — false).

Варианты разделителя:

  • system — системный

  • both_slash — любой слэш (по умолчанию)

  • forward_slash — прямой слэш

  • backslash — обратный слэш

Посмотреть пример
SELECT
    parse_filename('path/to/file.csv')                        AS result_1,
    parse_filename('path/to/file.csv', true, 'forward_slash') AS result_2,
    parse_filename('path\to\file.csv')                        AS result_3,
    parse_filename('path/to/folder')                          AS result_4;
+----------+----------+----------+----------+
| result_1 | result_2 | result_3 | result_4 |
+----------+----------+----------+----------+
| file.csv | file     | file.csv | folder   |
+----------+----------+----------+----------+

parse_path()

Описание

Возвращает список элементов указанного пути.

Использование

parse_path(string[, separator])

Возвращает список элементов (каталогов и имени файла) в указанном пути.

Варианты разделителя:

  • system — системный

  • both_slash — любой слэш (по умолчанию)

  • forward_slash — прямой слэш

  • backslash — обратный слэш

Посмотреть пример
SELECT
    parse_path('path/to/file.csv')                  AS result_1,
    parse_path('path/to/file.csv', 'forward_slash') AS result_2,
    parse_path('path\to\file.csv')                  AS result_3,
    parse_path('path/to/folder')                    AS result_4;
+--------------------+--------------------+--------------------+------------------+
| result_1           | result_2           | result_3           | result_4         |
+--------------------+--------------------+--------------------+------------------+
| {path,to,file.csv} | {path,to,file.csv} | {path,to,file.csv} | {path,to,folder} |
+--------------------+--------------------+--------------------+------------------+

position()

Описание

Возвращает позицию искомой строки в строке.

Использование

position('search_string' IN 'string')

Возвращает позицию первого вхождения искомой строки в строке, начиная с 1. Возвращает 0, если вхождений не найдено.

Посмотреть пример
SELECT
    position('Tengri' IN 'I love Tengri') AS result_1,
    position('like' IN 'I love Tengri')   AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| 8        | 0        |
+----------+----------+

replace()

Описание

Заменяет все подстроки на указанную строку.

Использование

replace(string, source, target)

Заменяет в строке string все подстроки source на target.

Посмотреть пример
SELECT
    replace('Tengri', 'engr', 'NGR')       AS result_1,
    replace('my name is Tengri', 'n', 'N') AS result_2;
+----------+-------------------+
| result_1 | result_2          |
+----------+-------------------+
| TNGRi    | my Name is TeNgri |
+----------+-------------------+
Описание

Извлекает из строки подстроку заданной длины, начиная с правого края.

Использование

right(string, length)

Посмотреть пример
SELECT
    right('I love Tengri', 6)   AS result_1,
    right('I love Tengri', 100) AS result_2;
+----------+---------------+
| result_1 | result_2      |
+----------+---------------+
| Tengri   | I love Tengri |
+----------+---------------+

rtrim()

Описание

Удаляет все вхождения любого из указанных символов в конце строки.

Использование

rtrim(string[, characters])

Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.

Посмотреть примеры
SELECT
    '"' || rtrim(' Tengri ') || '"' AS ltrim;
+-----------+
|   ltrim   |
+-----------+
| " Tengri" |
+-----------+
SELECT
    rtrim('{{([Tengri])}}', '{([])}') AS rtrim_brackets;
+----------------+
| rtrim_brackets |
+----------------+
| {{([Tengri     |
+----------------+

sha1()

Описание

Возвращает хеш SHA-1 данных из argument в виде строки (VARCHAR).

Использование

sha1(argument)

В argument могут быть двоичные данные или строка.

Посмотреть примеры
SELECT
    sha1('\xAA\xFF'::BLOB) as sha1_hash;
+------------------------------------------+
|                 sha1_hash                |
+------------------------------------------+
| e89b0db325637edfacde04a76005c492e2c5aeca |
+------------------------------------------+
SELECT
    sha1('Tengri') as sha1_hash;
+------------------------------------------+
|                 sha1_hash                |
+------------------------------------------+
| b514525a19995a2442d7565bfd9bb42d9dc71a13 |
+------------------------------------------+

sha256()

Описание

Возвращает хеш SHA-256 данных из argument в виде строки (VARCHAR).

Использование

sha256(argument)

В argument могут быть двоичные данные или строка.

Посмотреть пример
SELECT
    sha256('\xAA\xFF'::BLOB) as sha256_hash;
+------------------------------------------------------------------+
|                            sha256_hash                           |
+------------------------------------------------------------------+
| 768318522cac43261e8ef4946c2296a3643d523a8d5bda8ff5b82aa64470421a |
+------------------------------------------------------------------+
SELECT
    sha256('Tengri') as sha256_hash;
+------------------------------------------------------------------+
|                            sha256_hash                           |
+------------------------------------------------------------------+
| 8aaacef66663b14ee7c5a03dbaec7b40f0f3bf17bd12d2ed4f9aaad0e10a0d77 |
+------------------------------------------------------------------+

split()

Описание

Делит строку на две части по заданному сепаратору.

Использование

split(string, separator)

Псевдонимы

str_split, string_split, string_to_array

Посмотреть пример
SELECT
    split('I love Tengri', ' ') AS words;
+-----------------+
|      words      |
+-----------------+
| {I,love,Tengri} |
+-----------------+

starts_with()

Описание

Возвращает true, если строка начинается с искомой строки.

Использование

starts_with(string, search_string)

Посмотреть пример
SELECT
    starts_with('I love Tengri', 'I')      AS result_1,
    starts_with('I love Tengri', 'Tengri') AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| true     | false    |
+----------+----------+

strlen()

Описание

Возвращает количество байтов в строке.

Использование

strlen(string)

Посмотреть пример
SELECT
    strlen('Tengri 💙') AS strlen;
+--------+
| strlen |
+--------+
| 11     |
+--------+

substring()

Описание

Извлекает подстроку из строки.

Использование

substring(string, start[, length])

Псевдонимы

substr

Извлекает подстроку из указанной строки string, начиная с символа start и до конца строки. Если задан дополнительный аргумент length, извлекается подстрока длиной в length символов. Обратите внимание, что нумерация символов в исходной строке начинается с 1.

Посмотреть пример
SELECT
    substring('I love Tengri', 1)       AS substring_1,
    substring('I love Tengri', 3)       AS substring_2,
    substring('I love Tengri', 3, 4)    AS substring_3;
+---------------+-------------+-------------+
| substring_1   | substring_2 | substring_3 |
+---------------+-------------+-------------+
| I love Tengri | love Tengri | love        |
+---------------+-------------+-------------+

to_base64()

Описание

Кодирует бинарные данные в текстовую строку формата Base64.

Использование

to_base64(argument)

Псевдонимы

base64

Посмотреть пример
SELECT
    to_base64('A'::BLOB) AS result_1,
    to_base64('B'::BLOB) AS result_2,
    to_base64('C'::BLOB) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| QQ==     | Qg==     | Qw==     |
+----------+----------+----------+

trim()

Описание

Удаляет все вхождения любого из указанных символов с обеих сторон строки.

Использование

trim(string[, characters])

Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.

Посмотреть примеры
SELECT
    '"' || trim('  Tengri ') || '"' AS trim;
+----------+
|   trim   |
+----------+
| "Tengri" |
+----------+
SELECT
    trim('[Tengri]', '{([])}') AS trim_brackets;
+---------------+
| trim_brackets |
+---------------+
| Tengri        |
+---------------+

unicode()

Описание

Возвращает код Unicode первого символа строки в виде целого числа.

Использование

unicode(string)

Псевдонимы

ascii, ord

Посмотреть пример
SELECT
    unicode('Tengri') AS result_1,
    unicode('Тенгри') AS result_2,
    unicode(' ')      AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 84       | 1058     | 32       |
+----------+----------+----------+

upper()

Описание

Преобразует строку в верхний регистр.

Использование

upper(string)

Псевдонимы

ucase()

Посмотреть пример
SELECT
    upper('Tengri') AS upper;
+--------+
|  upper |
+--------+
| TENGRI |
+--------+

Оператор ||

Описание

Конкатенирует несколько строк, массивов или двоичных значений.

Использование

argument1 || argument2 || ...

Пустые значения (NULL) игнорируются.

См. также concat().

Посмотреть примеры
SELECT
    '\xAA'::BLOB || '\xff'::BLOB as result_blob,
    'I' || ' ' || 'love' || ' ' || 'Tengri' as result_string,
    ['T', 'e'] || ['n', 'g', 'r', 'i'] as result_array;
+-------------+---------------+---------------+
| result_blob | result_string |  result_array |
+-------------+---------------+---------------+
|             | I love Tengri | {T,e,n,g,r,i} |
+-------------+---------------+---------------+

Обратите внимание, что значения в колонке result_blob в выводе не отображаются (так как имеют тип BLOB).

С помощью выражения DESCRIBE выведем типы данных для всех колонок в таблице, созданной так же, как в предыдущем примере:

CREATE TABLE concat AS

SELECT
    '\xAA'::BLOB || '\xff'::BLOB as result_blob,
    'I' || ' ' || 'love' || ' ' || 'Tengri' as result_string,
    ['T', 'e'] || ['n', 'g', 'r', 'i'] as result_array;

DESCRIBE TABLE concat;
+---------------+-------------+------+------+---------+-------+
|  column_name  | column_type | null |  key | default | extra |
+---------------+-------------+------+------+---------+-------+
| result_blob   | BLOB        | YES  | null | null    | null  |
+---------------+-------------+------+------+---------+-------+
| result_string | VARCHAR     | YES  | null | null    | null  |
+---------------+-------------+------+------+---------+-------+
| result_array  | VARCHAR[]   | YES  | null | null    | null  |
+---------------+-------------+------+------+---------+-------+