Строковые операторы
В PostgreSQL существует обширный набор строковых операторов для выполнения различных действий, от простой конкатенации текста и сравнения строк до поиска по регулярным выражениям. Строковые операторы работают с типами char, varchar, а также с собственным типом PostgreSQL text.
Ниже описаны основные операторы сравнения и конкатенации, а также реализация операторов регулярных выражений с учетом и без учета регистра символов.
Базовые операторы сравнения
Базовые операторы сравнения строк и конкатенации, поддерживаемые в PostgreSQL, перечислены в табл. 5.1.
Примечание
Ключевые слова LIKE и ILIKE, приводящие к вызову функции like(), иногда называются операторами сравнения строк. Эти ключевые слова рассматриваются ниже в разделе "Функции".
Таблица 5.1. Базовые строковые операторы.
Оператор | Синтаксис | Описание |
---|---|---|
= | 'строка1' = ' строка2' | Возвращает true, если первая строка точно совпадает со второй |
! = | 'строка1'!= ' строка2' | Возвращает true, если первая строка не совпадает со второй |
<> | 'строка1' <> ' строка2' | Идентичен оператору != |
< | 'строка1' < ' строка2' | Возвращает true, если при лексикографической сортировке первая строка предшествует второй |
<= | 'строка1' <= ' строка2' | Возвращает true, если при лексикографической сортировке первая строка предшествует второй или их значения совпадают |
> | 'строка1' > ' строка2' | Возвращает true, если при лексикографической сортировке вторая строка предшествует первой |
>= | 'строка1' >= ' строка2' | Возвращает true, если при лексикографической сортировке вторая строка предшествует первой или их значения совпадают |
Все операторы сравнения строк возвращают логическое значение (true или false). Лексикографическая сортировка, упоминаемая в табл. 5.1, последовательно сравнивает символы строк и определяет, какой из символов "больше" другого. Если начальные символы двух строк совпадают, проверяются следующие символы (слева направо). Перебор продолжается до тех пор, пока не будут найдены два различающихся символа. В этом алгоритме сортировки "больший" символ выбирается сравнением ASCII-кодов, как показывает следующий пример:
booktown=# SELECT letter, ascii(letter) booktown-# FROM text_sorting booktown-# ORDER BY letter ASC; letter ascii 0 48 1 49 2 50 3 51 A 65 В 66 С 67 D 68 a 97 b 98 с 99 d I 100 (12 rows)
Если вы не уверены в порядке сортировки того или иного символа, воспользуйтесь функцией ascii () для получения его ASCII-кода (функция ascii () описана ниже в разделе "Функции"). В листинге 5.3 из таблицы books выбираются названия всех книг, первая буква которых при сортировке предшествует символу "D".
Листинг 5.3. Сравнение строк.
booktown=# SELECT title FROM books booktown=# WHERE substrCtitle, 1, 1) < 'D1; title 2001: A Space Odyssey Bartholomew and the Oobleck (2 rows)