Самоучитель по SQL-сервер в Linux



Правила использования операторов

Оператор работает с одним операндом или с двумя операндами. Большинство операторов работает с двумя операндами, между которыми ставится сам оператор (например, а-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 указывается причина ошибки. Эта информация поможет вам устранить ошибку и внести необходимые исправления в команду.