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

Как в sql округлить значение

  • автор:

ROUND (Transact-SQL)

Возвращает числовое значение, округленное до указанной длины или точности.

Синтаксис

ROUND ( numeric_expression , length [ ,function ] ) 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

numeric_expression
Выражение точной числовой или приблизительной категории типов данных.

length
Точность, с которой должно быть округлено значение numeric_expression. длина должна быть выражением типа tinyint, smallint или int. Если длина является положительным числом, numeric_expression округляется до числа десятичных позиций, указанных по длине. Если аргумент length является отрицательным числом, значение numeric_expression округляется слева от десятичной запятой, как указано в аргументе length.

function
Тип выполняемой операции. функция должна быть крошечной, маленькой или int. Если функция опущена или имеет значение 0 (по умолчанию), numeric_expression округляется. Когда указывается значение, не равное 0, значение numeric_expression усекается.

Типы возвращаемых данных

Возвращает следующие типы данных.

Результат выражения Возвращаемый тип
tinyint int
smallint int
int int
bigint bigint
Категория decimal и numeric (p, s) decimal(p, s)
Категории money и smallmoney money
Категории float и real float

Замечания

Функция ROUND всегда возвращает значение. Если аргумент length имеет отрицательное значение и больше числа знаков перед десятичной запятой, ROUND возвращает 0.

Пример Результат
ROUND(748,58, -4) 0

Функция ROUND возвращает округленное значение выражения numeric_expression независимо от типа данных, когда length является отрицательным числом.

Примеры Результат
ROUND(748,58, -1) 750,00
ROUND(748,58, -2) 700.00
ROUND(748.58, -3) В результате возникает арифметическое переполнение, так как для значения 748,58 по умолчанию используется тип decimal (5,2), который не позволяет вернуть значение 1000.
Чтобы округлить результат до четырех цифр, измените тип данных на входе. Например:

Примеры

А. Использование функции ROUND и приближений

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

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3); GO 
----------- ----------- 123.9990 124.0000 

B. Использование функции ROUND и округляющих аппроксимаций

В следующем примере показаны округление и аппроксимация.

SELECT ROUND(123.4545, 2), ROUND(123.45, -2); 
---------- ---------- 123.4500 100.00 

C. Использование функции ROUND для усечения

В следующем примере используются две инструкции SELECT для демонстрации различия между округлением и усечением. Первая инструкция округляет результат. Вторая инструкция усекает результат.

SELECT ROUND(150.75, 0); GO SELECT ROUND(150.75, 0, 1); GO 
-------- 151.00 (1 row(s) affected) -------- 150.00 (1 row(s) affected) 

См. также

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Функция SQL ROUND()

Оператор SQL ROUND() — функция для округления десятичных чисел. Работает только с числовыми столбцами или произвольными вещественными числами.

Функция SQL ROUND() имеет следующий синтаксис:

ROUND(expression, length)

expression — название столбца или столбцов, а так же вещественное число.

length — указывает точность округления для числа.

Примеры оператора SQL ROUND. Имеется следующая таблица Planets :

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687.58 1659 No Christiaan Huygens
2 Saturn 60268 10759.22 Yes
3 Neptune 24764 60190.91 1846 Yes John Couch Adams
4 Mercury 2439 115.88 1631 No Nicolaus Copernicus
5 Venus 6051 243.56 1610 No Galileo Galilei

Пример 1. Используя оператор SQL ROUND округлить столбец SunSeason с точностью до одного знака после запятой:

SELECT ROUND(SunSeason, 1) FROM Planets
SunSeason
687.5
10759.2
60190.9
115.8
243.5

Пример 2. Округлить значение числа с использованием оператора SQL ROUND.

Функция SQL ROUND() может принимать в качестве первого аргумента любое вещественное число:

SELECT ROUND(43532.8123, 3)

Как округлить число в sql

Для округления используется функция ROUND() . Вызванная с одним аргументом она округляет число до ближайшего целого, например:

SELECT ROUND( 10.4 ); 

Значение 10.4 будет округлено до 10.

Второй аргумент показывает до скольки знаков после запятой нужно округлять:

SELECT ROUND( 10.812, 2 ); 

В результате мы получим 10.81.

Функции округления

Возвращает наибольшее круглое число, которое меньше или равно, чем x. Круглым называется число, кратное 1 / 10N или ближайшее к нему число соответствующего типа данных, если 1 / 10N не представимо точно. N — целочисленная константа, не обязательный параметр. По умолчанию — ноль, что означает — округлять до целого числа. N может быть отрицательным.

Примеры: floor(123.45, 1) = 123.4, floor(123.45, -1) = 120.

x — любой числовой тип. Результат — число того же типа. Для целочисленных аргументов имеет смысл округление с отрицательным значением N (для неотрицательных N, функция ничего не делает). В случае переполнения при округлении (например, floor(-128, -1)), возвращается implementation specific результат.

ceil(x [ , N ] )​

Возвращает наименьшее круглое число, которое больше или равно, чем x. В остальном, аналогично функции floor, см. выше.

round(x [ , N ] )​

Округляет значение до указанного десятичного разряда.

Функция возвращает ближайшее значение указанного порядка. В случае, когда заданное число равноудалено от чисел необходимого порядка, для типов с плавающей точкой (Float32/64) функция возвращает то из них, которое имеет ближайшую чётную цифру (банковское округление), для типов с фиксированной точкой (Decimal) функция использует округление в бо́льшую по модулю сторону (математическое округление).

round(expression [, decimal_places]) 

Аргументы

  • expression — число для округления. Может быть любым выражением, возвращающим числовой тип данных.
  • decimal-places — целое значение.
    • Если decimal-places > 0 , то функция округляет значение справа от запятой.
    • Если decimal-places < 0 то функция округляет значение слева от запятой.
    • Если decimal-places = 0 , то функция округляет значение до целого. В этом случае аргумент можно опустить.

    Возвращаемое значение:

    Округлённое значение того же типа, что и входящее.

    Примеры​

    Пример использования с Float

    SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3 
    ┌───x─┬─round(divide(number, 2))─┐ │ 0 │ 0 │ │ 0.5 │ 0 │ │ 1 │ 1 │ └─────┴──────────────────────────┘ 

    Пример использования с Decimal

    SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3 
    ┌──────x─┬─round(CAST(divide(number, 2), 'Decimal(10, 4)'))─┐ │ 0.0000 │ 0.0000 │ │ 0.5000 │ 1.0000 │ │ 1.0000 │ 1.0000 │ └────────┴──────────────────────────────────────────────────┘ 

    Примеры округления

    Округление до ближайшего числа.

    round(3.2, 0) = 3 round(4.1267, 2) = 4.13 round(22,-1) = 20 round(467,-2) = 500 round(-467,-2) = -500 
    round(3.5) = 4 round(4.5) = 4 round(3.55, 1) = 3.6 round(3.65, 1) = 3.6 

    Смотрите также

    roundBankers​

    Округляет число до указанного десятичного разряда.

      Если округляемое число равноудалено от соседних чисел, то используется банковское округление.

    Банковское округление (англ. banker's rounding) — метод округления дробных чисел. Если округляемое число равноудалено от соседних чисел, то оно округляется до ближайшей чётной цифры заданного десятичного разряда. К примеру, 3,5 округляется до 4, а 2,5 до 2. Этот метод округления, используемый по умолчанию для чисел с плавающей запятой, определён в стандарте [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754#Roundings_to_nearest). Функция [round](#rounding_functions-round) также округляет числа с плавающей запятой по этому методу. Функция `roundBankers` округляет не только числа с плавающей запятой, но и целые числа методом банковского округления, например, `roundBankers(45, -1) = 40`. 

    Банковское округление позволяет уменьшить влияние округления чисел на результат суммирования или вычитания этих чисел.

    Пример суммирования чисел 1.5, 2.5, 3.5 и 4.5 с различным округлением:

    • Без округления: 1.5 + 2.5 + 3.5 + 4.5 = 12.
    • Банковское округление: 2 + 2 + 4 + 4 = 12.
    • Округление до ближайшего целого: 2 + 3 + 4 + 5 = 14.

    Синтаксис

    roundBankers(expression [, decimal_places]) 

    Аргументы

    • expression — число для округления. Может быть любым выражением, возвращающим числовой тип данных.
    • decimal-places — десятичный разряд. Целое число.
      • decimal-places > 0 — функция округляет значение выражения до ближайшего чётного числа на соответствующей позиции справа от запятой. Например, roundBankers(3.55, 1) = 3.6 .
      • decimal-places < 0 — функция округляет значение выражения до ближайшего чётного числа на соответствующей позиции слева от запятой. Например, roundBankers(24.55, -1) = 20 .
      • decimal-places = 0 — функция округляет значение до целого. В этом случае аргумент можно не передавать. Например, roundBankers(2.5) = 2 .

      Возвращаемое значение

      Округлённое значение по методу банковского округления.

      Пример использования

       SELECT number / 2 AS x, roundBankers(x, 0) AS b fROM system.numbers limit 10 
      ┌───x─┬─b─┐ │ 0 │ 0 │ │ 0.5 │ 0 │ │ 1 │ 1 │ │ 1.5 │ 2 │ │ 2 │ 2 │ │ 2.5 │ 2 │ │ 3 │ 3 │ │ 3.5 │ 4 │ │ 4 │ 4 │ │ 4.5 │ 4 │ └─────┴───┘ 

      Примеры банковского округления

      roundBankers(0.4) = 0 roundBankers(-3.5) = -4 roundBankers(4.5) = 4 roundBankers(3.55, 1) = 3.6 roundBankers(3.65, 1) = 3.6 roundBankers(10.35, 1) = 10.4 roundBankers(10.755, 2) = 10,76 

      Смотрите также

      roundToExp2(num)​

      Принимает число. Если число меньше единицы — возвращает 0. Иначе округляет число вниз до ближайшей (целой неотрицательной) степени двух.

      roundDuration(num)​

      Принимает число. Если число меньше единицы — возвращает 0. Иначе округляет число вниз до чисел из набора: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. Эта функция специфична для Яндекс.Метрики и предназначена для реализации отчёта по длительности визита.

      roundAge(num)​

      Принимает число. Если число меньше 18 — возвращает 0. Иначе округляет число вниз до чисел из набора: 18, 25, 35, 45, 55. Эта функция специфична для Яндекс.Метрики и предназначена для реализации отчёта по возрасту посетителей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *