Текстовые функции
Текстовые функции — это функции для работы с текстовыми строками (данными типа VARCHAR).
array_extract()
| Описание |
Извлекает символ из указанной строки или элемент из указанного списка. |
| Использование |
|
Извлекает символ из указанной строки или элемент из указанного списка по заданному индексу. Для индекса допускаются отрицательные значения.
Нумерация элементов начинается с 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()
| Описание |
Извлекает подстроку из указанной строки или список из указанного списка. |
| Использование |
|
| Псевдонимы |
|
Извлекает подстроку из указанной строки или список из указанного списка по заданным координатам начала и конца. Для координат допускаются отрицательные значения.
Нумерация элементов начинается с 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()
| Описание |
Рисует полосу в высоту строки. |
| Использование |
|
Рисует черную полосу в высоту строки. Длина полосы пропорциональна 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()
| Описание |
Конвертирует каждый символ строки в его бинарное представление. |
| Использование |
|
Посмотреть пример
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, заданному в |
| Использование |
|
Посмотреть пример
SELECT
chr(84) || chr(78) || chr(71) || chr(82) || chr(105) AS chr;
+-------+
| chr |
+-------+
| TNGRi |
+-------+
concat()
| Описание |
Конкатенирует несколько строк, массивов или двоичных значений. |
| Использование |
|
Пустые значения (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()
| Описание |
Конкатенирует строки через разделитель. |
| Использование |
|
Конкатенирует несколько строк через заданный разделитель.
Если в качестве строки передается значение 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()
| Описание |
Возвращает |
| Использование |
|
Посмотреть пример
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()
| Описание |
Возвращает |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
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. |
| Использование |
|
Форматирует строку, используя синтаксис 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()
| Описание |
Возвращает наибольший аргумент из указанных. |
| Использование |
|
-
При использовании с числами возвращает наибольшее число.
-
При использовании с текстовыми строками — возвращает последнюю из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.
-
При использовании с типами для даты и времени — возвращает самый поздний объект.
Посмотреть примеры
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()
| Описание |
Возвращает наименьший аргумент из указанных. |
| Использование |
|
-
При использовании с числами возвращает наименьшее число.
-
При использовании с текстовыми строками — возвращает первую из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.
-
При использовании с типами для даты и времени — возвращает самый ранний объект.
Посмотреть примеры
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()
| Описание |
Извлекает из строки подстроку заданной длины, начиная с левого края. |
| Использование |
|
Посмотреть пример
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()
| Описание |
Возвращает количество символов в строке. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
length('I love Tengri 💙') AS length;
+--------+
| length |
+--------+
| 15 |
+--------+
lower()
| Описание |
Преобразует строку в нижний регистр. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
lower('TNGRi') AS lower;
+-------+
| lower |
+-------+
| tngri |
+-------+
ltrim()
| Описание |
Удаляет все вхождения любого из указанных символов в начале строки. |
| Использование |
|
Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.
Посмотреть примеры
SELECT
'"' || ltrim(' Tengri ') || '"' AS ltrim;
+-----------+
| ltrim |
+-----------+
| "Tengri " |
+-----------+
SELECT
ltrim('{{([Tengri])}}', '{([])}') AS ltrim_brackets;
+----------------+
| ltrim_brackets |
+----------------+
| Tengri])}} |
+----------------+
md5()
В argument могут быть двоичные данные или строка.
Посмотреть примеры
SELECT
md5('\xAA\xFF'::BLOB) as md5_hash;
+----------------------------------+
| md5_hash |
+----------------------------------+
| 1fab7f7621f5ddc051ebd1f2c63c4665 |
+----------------------------------+
SELECT
md5('Tengri') as md5_hash;
+----------------------------------+
| md5_hash |
+----------------------------------+
| 846b02d31131a10bd6ac0ba189c65bef |
+----------------------------------+
parse_filename()
| Описание |
Возвращает имя файла по указанному пути. |
| Использование |
|
Возвращает имя файла по указанному пути — последний элемент пути.
Если 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()
| Описание |
Возвращает список элементов указанного пути. |
| Использование |
|
Возвращает список элементов (каталогов и имени файла) в указанном пути.
Варианты разделителя:
-
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()
| Описание |
Возвращает позицию искомой строки в строке. |
| Использование |
|
Возвращает позицию первого вхождения искомой строки в строке, начиная с 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()
| Описание |
Заменяет все подстроки на указанную строку. |
| Использование |
|
Заменяет в строке 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()
| Описание |
Извлекает из строки подстроку заданной длины, начиная с правого края. |
| Использование |
|
Посмотреть пример
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()
| Описание |
Удаляет все вхождения любого из указанных символов в конце строки. |
| Использование |
|
Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.
Посмотреть примеры
SELECT
'"' || rtrim(' Tengri ') || '"' AS ltrim;
+-----------+
| ltrim |
+-----------+
| " Tengri" |
+-----------+
SELECT
rtrim('{{([Tengri])}}', '{([])}') AS rtrim_brackets;
+----------------+
| rtrim_brackets |
+----------------+
| {{([Tengri |
+----------------+
sha1()
| Описание |
Возвращает хеш SHA-1 данных из |
| Использование |
|
В 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 могут быть двоичные данные или строка.
Посмотреть пример
SELECT
sha256('\xAA\xFF'::BLOB) as sha256_hash;
+------------------------------------------------------------------+
| sha256_hash |
+------------------------------------------------------------------+
| 768318522cac43261e8ef4946c2296a3643d523a8d5bda8ff5b82aa64470421a |
+------------------------------------------------------------------+
SELECT
sha256('Tengri') as sha256_hash;
+------------------------------------------------------------------+
| sha256_hash |
+------------------------------------------------------------------+
| 8aaacef66663b14ee7c5a03dbaec7b40f0f3bf17bd12d2ed4f9aaad0e10a0d77 |
+------------------------------------------------------------------+
split()
| Описание |
Делит строку на две части по заданному сепаратору. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
split('I love Tengri', ' ') AS words;
+-----------------+
| words |
+-----------------+
| {I,love,Tengri} |
+-----------------+
starts_with()
| Описание |
Возвращает |
| Использование |
|
Посмотреть пример
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()
| Описание |
Возвращает количество байтов в строке. |
| Использование |
|
Посмотреть пример
SELECT
strlen('Tengri 💙') AS strlen;
+--------+
| strlen |
+--------+
| 11 |
+--------+
substring()
| Описание |
Извлекает подстроку из строки. |
| Использование |
|
| Псевдонимы |
|
Извлекает подстроку из указанной строки 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. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
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()
| Описание |
Удаляет все вхождения любого из указанных символов с обеих сторон строки. |
| Использование |
|
Если подлежащие удалению символы не указаны, то по умолчанию таким символом является пробел.
Посмотреть примеры
SELECT
'"' || trim(' Tengri ') || '"' AS trim;
+----------+
| trim |
+----------+
| "Tengri" |
+----------+
SELECT
trim('[Tengri]', '{([])}') AS trim_brackets;
+---------------+
| trim_brackets |
+---------------+
| Tengri |
+---------------+
unicode()
| Описание |
Возвращает код Unicode первого символа строки в виде целого числа. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
unicode('Tengri') AS result_1,
unicode('Тенгри') AS result_2,
unicode(' ') AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 84 | 1058 | 32 |
+----------+----------+----------+
upper()
| Описание |
Преобразует строку в верхний регистр. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
upper('Tengri') AS upper;
+--------+
| upper |
+--------+
| TENGRI |
+--------+
Оператор ||
| Описание |
Конкатенирует несколько строк, массивов или двоичных значений. |
| Использование |
|
Пустые значения (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 |
+---------------+-------------+------+------+---------+-------+