Правила использования операторов
Оператор работает с одним операндом или с двумя операндами. Большинство операторов работает с двумя операндами, между которыми ставится сам оператор (например, а-b). Такие операторы называются бинарными. Операторы, работающие с одним операндом, называются унарными; в этом случае оператор либо предшествует операнду, либо следует за ним (например, знак @ перед значением является унарным оператором, возвращающим модуль числа).
Некоторые операторы имеют несколько интерпретаций в зависимости от типа данных, к которым они применяются. С другой стороны, часть операторов не имеет смысла для некоторых типов данных (дополнительная информация о типах данных PostgreSQL приведена в главе 3).
Например, оператор сложения (+) может использоваться для суммирования двух целочисленных величии, но он не может прибавить целое число к текстовой строке. Считается, что такой вариант использования оператора дает неопределенный результат и потому является недопустимым. При этом сам оператор (в данном случае +) опознается нормально, но PostgreSQL выводит сообщение об ошибке (вроде того, что приведено в листинге 5.2).
Для примера рассмотрим таблицу authors, связывающую имена авторов с числовыми кодами.
Таблица "authors" Атрибут | Тип | Модификатор id | integer not null lastjiame j text firstjname 1 text Индекс: authors_pkey
Код автора id относится к типу integer (4-байтовое целое), а фамилия автора – к типу text. Поскольку поле id относится к числовому типу, оно может использоваться в качестве операнда математического оператора с другим числовым значением.
В листинге 5.1 приведен пример правильного использования оператора сложения (+).
Листинг 5.1. Правильное использование математического оператора.
booktown=# SELECT id 1 AS id_p1us_one. 1ast_name booktown-# FROM authors booktown-# ORDER BY id DESC LIMIT 5; id_plus_one j last_name 25042 Bianco 15991 | Bourgeois 7807 | Christiansen 7806 | Lutz 4157 I King (5 rows)
Попытка сложения несовместимых типов продемонстрирована в листинге 5.2.
Листинг 5.2. Неверное использование операторов.
booktown=# SELECT id + lastjiame AS mistake booktown-# FROM authors: ERROR: Unable to identify an operator '+' for types 'int4' and 'text' You will have to retype this query using an explicit cast
К счастью, в сообщениях о недопустимом использовании операторов в PostgreSQL указывается причина ошибки. Эта информация поможет вам устранить ошибку и внести необходимые исправления в команду.