Перейти к содержанию

SUBSTRING

Функция SUBSTRING извлекает подстроку из строки string подобно тому, как это делает функция SUBSTR, однако предоставляет дополнительные возможности поиска символов.

Синтаксис

Основная функция

SUBSTRING ( substringVariant )

Варианты поиска подстроки

substringFromFor substringRegular substringFor substringFrom substringSimilar

Доступны несколько вариантов поиска подстроки:

  • For — искать слева направо по указанный номера символа
  • From — искать слева направо с указанного номера символа, а также извлечь первую подстроку, соответствующую регулярному выражению в стиле POSIX
  • FromFor — сочетание обоих вариантов выше, указание полных границ поиска
  • Regular — традиционный поиск по номерам символов, как в SUBSTR
  • Similar — поиск по схожести c использованием регулярного выражения и экранирования специальных символов в нем

Отличие варианта FromFor от Regular также состоит в том, что поиск может происходить не только по позициям символом (их номерах), но и по вхождению подстроки с помощью регулярных выражений, см. примеры.

substringFor

expression FOR expression

substringFrom

expression FROM , expression

substringFromFor

expression FROM expression FOR expression

substringRegular

expression , expression , expression

substringSimilar

expression SIMILAR expression ESCAPE expression

Выражение

Диаграмма

NOT table . column literal case cast coalesce current_date like localtimestamp ilike substr substring to_char to_date trim lower upper NOT EXISTS ( dql ( dql expression , ) IS NOT NULL TRUE FALSE UNKNOWN expression NOT BETWEEN expression AND IN + - * / <> != >= > <= < = || AND OR expression

Литерал

Диаграмма

TRUE FALSE NULL decimal double integer string unsigned $ unsigned ?

Примеры

Указание только начального отступа
sql> SELECT SUBSTRING('(select 1)', 3);
+----------+
| col_1    |
+==========+
| elect 1) |
+----------+
(1 rows)
Указание обеих границ
sql> SELECT SUBSTRING('1234567890' FROM 4 FOR 3);
+-------+
| col_1 |
+=======+
| 456   |
+-------+
(1 rows)
Поиск первой подстроки, удовлетворяющей регулярному выражению в стиле SQL
sql> SELECT SUBSTRING('abcdefg' FROM 'a#"(b_d)#"%' FOR '#');
+-------+
| col_1 |
+=======+
| bcd   |
+-------+
(1 rows)
Поиск первой подстроки, удовлетворяющей регулярному выражению в стиле POSIX
sql> SELECT substring('Thomas' FROM '...$') ;
+-------+
| col_1 |
+=======+
| mas   |
+-------+
(1 rows)
Поиск первой подстроки, удовлетворяющей регулярному выражению в стиле SQL
sql>  SELECT SUBSTRING('abcdefg' SIMILAR 'a#"%#"x|g' ESCAPE '#');
+-------+
| col_1 |
+=======+
| bcdef |
+-------+
(1 rows)