loading..
Русский    English
22:31
листать

Функция ROUND

Рассмотрим такую задачу.

Посчитать средний размер жесткого диска ПК. Результат представить с двумя знаками после десятичной точки.

Выполнив запрос

Консоль
Выполнить
  1. SELECT AVG(hd) AS avg_hd FROM pc;
мы получим такой результат:

avg_hd
13.6666666666667

Чтобы выполнить требуемое округление можно воспользоваться функцией ROUND:

Консоль
Выполнить
  1. SELECT round(AVG(hd),2) AS avg_hd FROM pc;

avg_hd
13.67

Второй аргумент этой функции как раз указывает число десятичных знаков результата.

Как видно, результат был округлен по арифметическим правилам. Однако у функции ROUND есть третий необязательный аргумент, который говорит о том, округлять ли результат (значение 0 - принимается по умолчанию) или отбрасывать цифры сверх удерживаемых (ненулевое значение).

Т.е. если мы перепишем наш запрос так:

Консоль
Выполнить
  1. SELECT round(AVG(hd),2,1) AS avg_hd FROM pc;
то получим другой результат:

avg_hd
13.66

Кстати, округлять можно до любого знака, не только десятичного. Например, чтобы округлять до десятков, сотен и т.д., используются отрицательные значения второго аргумента. Следующий запрос округляет результат до десятков.

Консоль
Выполнить
  1. SELECT round(AVG(hd),-1) AS avg_hd FROM pc;

avg_hd
10

Следует отметить, что функция ROUND выполняет округление, но не меняет тип результата. Т.е. если аргумент будет иметь тип dec(12,6), то и результат округления будет того же типа, а именно,

avg_hd
13.670000

В этом легко убедиться, выполнив запрос

  1. SELECT round(CAST(AVG(hd) AS dec(12,6)),2) AS avg_hd FROM pc;

Поэтому, если вы хотите избавиться от хвостовых нулей, используйте преобразование к нужному вам типу, например, dec(12,2). Тогда нам и функция ROUND не потребуется. :-)

Консоль
Выполнить
  1. SELECT CAST(AVG(hd) AS DEC(12,2)) AS avg_hd FROM pc;

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
сегодня
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100