9.3. Математические функции и операторы #
Математические операторы определены для множества типов Postgres Pro. Как работают эти операции с типами, для которых нет стандартных соглашений о математических действиях (например, с типами даты/времени), мы опишем в последующих разделах.
В Таблице 9.4 показаны математические операторы, реализованные для стандартных числовых типов. Если не отмечено обратное, операторы, принимающие числовой_тип, работают с типами smallint, integer, bigint, numeric, real и double precision. Операторы, принимающие целочисленный_тип, работают с типами smallint, integer и bigint. За исключением явно отмеченных случаев, все разновидности операторов возвращают такой же тип данных, который имеет их аргумент (или их аргументы). Вызовы с неодинаковыми типами аргументов, например integer + numeric, разрешаются в пользу типа, оказавшегося последним в определённых выше списках.
Таблица 9.4. Математические операторы
| Оператор Описание Пример(ы) | 
|---|
| 
 Сложение 
 | 
| 
 Унарный плюс (нет операции) 
 | 
| 
 Вычитание 
 | 
| 
 Смена знака 
 | 
| 
 Умножение 
 | 
| 
 Деление (при делении целочисленных типов результат округляется в направлении нуля) 
 
 
 | 
| 
 Остаток от деления; имеется для типов  
 | 
| 
 
 Возведение в степень 
 В отличие от принятого в математике порядка,  
 
 | 
| 
 Квадратный корень 
 | 
| 
 Кубический корень 
 | 
| 
 Абсолютное значение 
 | 
| 
 Битовое И 
 | 
| 
 Битовое ИЛИ 
 | 
| 
 Битовое исключающее ИЛИ 
 | 
| 
 Битовое НЕ 
 | 
| 
 Битовый сдвиг влево 
 | 
| 
 Битовый сдвиг вправо 
 | 
В Таблице 9.5 перечислены все существующие математические функции. Многие из этих функций имеют несколько форм с разными типами аргументов. За исключением случаев, где это указано явно, все разновидности функций возвращают тот же тип данных, который имеет их аргумент (или аргументы); вызовы с неодинаковыми типами разрешаются по тому же принципу, что был описан выше для операторов. Функции, работающие с данными double precision, в массе своей используют реализации из системных библиотек сервера, поэтому точность и поведение в граничных случаях может зависеть от системы сервера.
Таблица 9.5. Математические функции
В Таблице 9.6 перечислены все функции для генерации случайных чисел.
Таблица 9.6. Случайные функции
Функции random() и random_normal(), указанные в таблице Таблица 9.6, используют детерминированный генератор псевдослучайных чисел. Он работает быстро, но не подходит для криптографических приложений; более безопасная альтернатива имеется в модуле pgcrypto. Если воспользоваться функцией setseed() и вызывать её с одним и тем же аргументом, в текущем сеансе можно получать повторяющиеся последовательности результатов random() или random_normal(). Если функция setseed() до этого не вызывалась в текущем сеансе, при первом вызове одной из этих функций затравка будет получена из платформозависимого источника случайных чисел.
В Таблице 9.7 перечислены все имеющиеся тригонометрические функции. У каждой функции имеются две вариации: одна измеряет углы в радианах, а вторая — в градусах.
Таблица 9.7. Тригонометрические функции
Примечание
Также можно работать с углами в градусах, применяя вышеупомянутые функции преобразования единиц radians()degrees()sind(30).
В Таблице 9.8 перечислены все имеющиеся гиперболические операторы.
Таблица 9.8. Гиперболические функции