Иллюстрированный самоучитель по PostgreSQL

Строковые операторы

Конкатенация

Оператор конкатенации (||) играет очень важную роль при форматировании выходных данных. Как и все операторы, он может использоваться в командах SQL всюду, где могут использоваться константы. Допускается последовательная конкатенация строковых значений, для этого перечисляемые строковые константы или идентификаторы разделяются операторами ||.

Например, оператор конкатенации может использоваться в секции WHERE для фильтрации записей на основании сравнения с символьной строкой. Пример приведен в листинге 5.4.

Листинг 5.4. Конкатенация строк.

booktown=# SELECT 'The Title: ' | title || ', by ' |
booktown-# first_name || ' ' II lastjiame AS bookjinfo
booktown-# FROM books NATURAL JOIN authors AS a (authorjd) LIMIT 3;
book_info
The Title: The Shining, by Stephen King
The Title: Dune, by Frank Herbert
The Title: 2001: A Space Odyssey, by Arthur C. Clarke
(3 rows)

Операторы регулярных выражений

Если обычного сравнения строк оказывается недостаточно, в PostgreSQL предусмотрены специальные операторы для поиска совпадений по регулярным выражениям. Регулярное выражение похоже на строковую константу, с которой сравнивается исходная строка, но некоторые символы (квадратные скобки, вертикальная черта, обратная косая черта и т. д.) при сравнении интерпретируются особым образом. Если вам доводилось работать с такими программами Unix, как sed, grep или perl, возможно, вы уже знакомы с синтаксисом регулярных выражений.

Примечание
Общие сведения о регулярных выражениях приведены в книге Джеффри Фридла (Jeffrey Friedl) "Mastering Regular Expressions"
.

Регулярное выражение состоит из литералов и метасимволов (специальных символов). Обычно регулярные выражения могут совпадать с несколькими вариантами строковых значений. Пример приведен в листинге 5.5, где в таблице authors ищутся все имена (firstname), начинающиеся с символа А или Т.

Листинг 5.5. Поиск по регулярному выражению.

booktown=# SELECT first_name, last_name
booktown-# FROM authors
booktown-# WHERE firstjiame <strong>~</strong> "AT1;
firstjiame lastjiame
Ariel Denham Tom Christiansen
Arthur C. | Clarke Andrew Brookins
Theodor Seuss j Geisel (5 rows)

Символ ~ в секции WHERE является оператором регулярного выражения, а само регулярное выражение задается строкой ЛА| ЛТ. В него входят специальные символы (метасимволы) л и |, а также литералы А и Т. Метасимволы регулярных выражений описаны ниже в этом пункте.

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.