0.9 | 1.0 | 1.5.3 | 1.5.4 | 1.5.5 | 2.0 | 2.1 | 2.5 | 3.0 | |
---|---|---|---|---|---|---|---|---|---|
Как UDF | Да | Да | Да | Да | Да | Да | - | - | - |
Как встроенная функция | - | - | - | - | - | - | Да | Да | Да |
ROUND( < аргумент > , < знаков > )
Аргумент | Описание |
---|---|
< аргумент > | Числовое выражение |
< знаков > | INTEGER |
Возвращает | INTEGER, BIGINT или DOUBLE |
Функция ROUND() возвращает результат округления числа < аргумент > до < знаков > знаков после запятой в ближайшую сторону. Если число < знаков > отрицательное, то округление идет до < знаков > знаков перед запятой.
В Firebird версии младше 2.1 для того, чтобы пользоваться этой функцией, ее небходимо подключить к базе данных как UDF.
1. В Firebird версии младше 2.1 функция объявляется как UDF в внешнем модуле «ib_udf».
DECLARE EXTERNAL FUNCTION ROUND INTEGER BY DESCRIPTOR, INTEGER BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbround' MODULE_NAME 'fbudf';
2. В Firebird версии 2.1 и старше является встроенной функцией при соглашении объявления ее как:
DECLARE EXTERNAL FUNCTION ROUND INTEGER BY DESCRIPTOR, INTEGER BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbround' MODULE_NAME 'SYSTEM';
SELECT ROUND(1111.23456, 2), ROUND(1.23456, 0), ROUND(1111.23456, -2) FROM RDB$DATABASE
langref.pdf
Обсуждение
У меня файребирд версии 2.0 подключаю функцию как в варианте 2 (встроенная)
делаю запрос из примера
в результате возвращается ошибка
Invalid token. invalid request BLR at offset 68. function ROUND is not defined. module name or entrypoint could not be found.
думаю там опечатка, второй вариант для 2,1 и выше.
Думаю, опечатка - ВОЗРАЩАЕМОЕ ЗНАЧЕНИЕ НЕ INTEGER