![]() |
![]() |
![]() |
Числовые операторы Числовые операторы PostgreSQL делятся на три категории.
Ниже приведены более подробные описания по всем трем категориям. Математические операторы Математические операторы используются в целевых списках, в секции WHERE команды SELECT и вообще везде, где встречаются числовые данные. В табл. 5.4 перечислены математические операторы PostgreSQL и приведены примеры их использования. Таблица 5.4. Математические операторы
Пример использования математических операторов в целевом списке приведен в листинге 5.9. Оператор / используется для вычисления удельной прибыли по каждой книги. Частное от деления преобразуется к типу numeri с с усечением до двух цифр в дробной части. Наконец, из результата вычитается целочисленная константа 1, чтобы результат выражался в процентах свыше 100. Листинг 5.9. Использование математических операторов booktown=# SELECT isbn, booktown-# (retail / cost)::numeric(3, 2) - 1 AS margin booktown-# FROM stock booktowri-# ORDER BY margin DESC booktown-# LIMIT 4; isbn | margin 0451457994 | 0.35 0760720002 | 0.33 0451198492 0.30 0441172717 | 0.29 (4 rows) Обратите внимание на определение временного псевдонима margin при помощи ключевого слова AS. Псевдоним представляет собой временное имя, которое существует только во время обработки запроса. Операторы сравнения Операторы сравнения работают со значениями таких типов, как integer или text, но всегда возвращают результат типа boo"! ean. Они часто встречаются в секции WHERE, но могут использоваться в любом контексте, в котором действителен тип boolean. Операторы сравнения PostgreSQL перечислены в табл. 5.5. Таблица 5.5. Операторы сравнения
ПРИМЕЧАНИЕ Оператор <> существует как синоним оператора != для обеспечения совместимости с другими реализациями СУБД на базе SQL. Работают эти операторы одинаково. Пример команды, в которой используются операторы сравнения, приведен в листинге 5.10. Листинг 5.10. Использование операторов сравнения booktown=# SELECT isbn, stock booktown-# FROM stock booktown-# WHERE retail <= 25 booktown-# AND stock != 0: isbn | stock 0441172717 | 77 0590445065 | 10 0679803335 | 18 0760720002 | 28 09296C5942 | 25 1885418035 | 77 (6 rows) Сравнение с использованием ключевых слов Ключевое слово BETWEEN (также иногда называемое оператором) позволяет проверить, входит ли значение в некоторый интервал. Например, команда SELECT, приведенная в листинге 5.11, находит книги, цена которых находится в интервале от 10 до 17 долларов. Листинг 5.11. Ключевое слово BETWEEN booktown=# SELECT isbn FROM stock booktown-# WHERE cost BETWEEN 10 AND 17; isbn 0394800753 0441172717 0451457994 (3 rows) Аналогичного результата можно добиться и при помощи оператора <= в сочетании с оператором >= (листинг 5.12). Листинг 5.12. Имитация ключевого слова BETWEEN при помощи операторов booktown=# SELECT isbn FROM stock booktown-# WHERE cost >= 10 AND cost <= 17; isbn 0394800753 0441172717 0451457994 (3 rows) В варианте с ключевым словом BETWEEN команда выглядит более понятной. Впрочем, для PostgreSQL оба варианта эквивалентны, поэтому выбор зависит от личных предпочтений программиста. Двоичные операторы Двоичные операторы выполняют поразрядные операции с битовыми последовательностями или целыми числами, что обычно приводит к изменению их значений. Двоичные операторы PostgreSQL перечислены в табл. 5.6. Таблица 5.6. Двоичные операторы
В листинге 5.13 приведен пример сдвига числа и его двоичного представления на два разряда вправо оператором ». Кроме того, в нем используется функция преобразования битовой последовательности в целочисленный тип bitten nt4(), описанная в разделе «Функции». Листинг 5.13. Сдвиг битовых последовательностей booktown=# SELECT b'1000' » 2 AS "8 shifted right". booktown-# Mttoint4(b'1000' » 2) AS integer. booktown-# 8 » 2 AS likewise; 8 shifted right | integer | likewise 0010 I 2 I 2 (1 row) ПРИМЕЧАНИЕ При сдвиге битовых последовательностей исходная длина строки не изменяется, а разряды, выходящие за левый или правый край последовательности, отсекаются. При использовании операторов &, | или # битовые операнды должны иметь одинаковую длину. |
![]() |
![]() |
![]() |