Усечение представления значения

Функция

Усечение значения с заданной точностью.

Спецификация
 
< синтаксис >::=
Синтаксические правила
  1. При усечении < числового выражения > округление не выполняется.

  2. < Точность > задает точность усечения: при положительном значении усечение выполняется после десятичной точки (количество цифр после десятичной точки). Отрицательное значение – точность округления перед десятичной точкой, т.е. при -1 – до ближайшего целого десятка, -2 – до сотни, -3 до тысячи и т.д.

    Примечание

    При усечении до значения 1e-13 числа считаются равными.

  3. < Элемент формата «дата-время» > задает точность усечения значения типа «дата-время» (до какого элемента даты-времени должно выполняться усечение).

  4. Для < выражения типа «дата-время» > аргумент < точность > можно не указывать. В этом случае усечение выполняется до текущего дня даты.

    select sysdate, trunc(sysdate,'d'), trunc(sysdate);
    |17.08.2015:10:55:11.79|17.08.2015:00:00:00.00|17.08.2015:00:00:00.00|
Возвращаемое значение
  1. < Выражение >, усеченное до заданной точности.

  2. Тип возвращаемого результата: для < числового выражения > DOUBLE, для < выражение типа «дата-время» > DATE.

  3. Результат при указании < элемента формата «дата-время» > 'D' зависит от наличия ключа /COMPATIBILITY=ORACLE в команде запуска ядра СУБД:

    • значение DATE, усеченное до текущего дня, если ключ не задан;

    • значение DATE, усеченное до ближайшего дня начала недели, если ключ задан.

  4. Результат при указании < элемента формата «дата-время» > 'DY' или 'DAY' будет усечен до ближайшего дня начала недели.

  5. Если аргумент NULL, результат NULL.

Примеры
select round(6.785,1),
       trunc(6.785,1),
       round(-6.785,5),
       trunc(-6.785,0),
       abs(round((avg(salary) - max(salary)),2) - trunc((avg(salary) - max(salary)),0)),
       trunc(abs(round((avg(salary) - max(salary)),2) - trunc((avg(salary) - max(salary)),0)),5)
  from person;
|6.8 |6.7 |-6.785 |-6 |0.160000000003492 |0.16 |
select sysdate, round(sysdate, 'hh'),trunc(sysdate, 'hh');
|29.08.2005:11:38:27.00|29.08.2005:12:00:00.00|29.08.2005:11:00:00.00|
select sysdate, round(sysdate, 'mi'),trunc(sysdate, 'mi');
|29.08.2005:11:38:27.00|29.08.2005:11:38:00.00|29.08.2005:11:38:00.00|
select sysdate, round(sysdate, 'd'),trunc(sysdate, 'd');
|29.08.2005:11:38:27.00|29.08.2005:00:00:00.00|29.08.2005:00:00:00.00|
select sysdate, round(sysdate, 'm'),trunc(sysdate, 'm');
|29.08.2005:11:38:27.00|01.09.2005:00:00:00.00|01.08.2005:00:00:00.00|
select sysdate, round(sysdate, 'y'),trunc(sysdate, 'y');
|29.08.2005:11:38:27.00|01.01.2006:00:00:00.00|01.01.2005:00:00:00.00|