Строковые операторы
Конкатенация
Оператор конкатенации (||) играет очень важную роль при форматировании выходных данных. Как и все операторы, он может использоваться в командах 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() ищет совпадение для всей строки, а операторы регулярных выражений ищут совпадение в произвольной позиции заданной строки, если только в самом регулярном выражении не указано обратное.