Oracle и SQL Функции сервера `CEIL / CEILING` возвращают разные результаты - PullRequest
0 голосов
/ 29 января 2020

In Oracle:

  • Ввод: Select CEIL(5.416579) From Dual
  • Выход: 5.42

В SQL Сервер:

  • Входные данные: Select CEILING(5.416579)
  • Выходные данные: 6

Согласно Oracle и SQL Server CEIL/CEILING функции возвращают целочисленное значение, но здесь оба из них дают разные результаты.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Документация Oracle CEIL гласит:

Синтаксис

CEIL(n)

Назначение

CEIL возвращает наименьшее целое число, большее или равное n.

Так что функция CEIL(5.416579) всегда будет возвращать 6 в Oracle.

Единственный способ, с помощью которого я вижу, что вы можете получить другой результат, - это если кто-то создал пользовательскую функцию CEIL в вашей схеме, и она вызывается вместо встроенной функции:

(не делайте этого)

CREATE FUNCTION SCHEMA_NAME.CEIL(n NUMBER)
  RETURN NUMBER
AS
  i INTEGER := TRUNC( n * 100 );
BEGIN
  IF i <> n * 100 THEN
    RETURN (i + 1)/100;
  ELSE
    RETURN i/100;
  END IF;
END;
/

Но даже тогда SELECT CEIL(5.416579) FROM DUAL, кажется, использует глобальную встроенную функцию и возвращает 6. Чтобы переопределить это, вы должны явно указать пакет:

SELECT SCHEMA_NAME.CEIL(5.416579) FROM DUAL

Выходы:

5.42

db <> fiddle

Убедитесь, что у вас нет другой функции с именем CEIL, но без этого описываемое вами поведение будет невозможно.

0 голосов
/ 29 января 2020

Точность настройки в вашей системе, скорее всего, изменилась до минимальной точности 2.

...