Как использовать ROUNDDOWN в sqlserver

Я хочу использовать функцию ROUNDDOWN.

Когда я попытался использовать следующий запрос, он дает мне сообщение об ошибке "rounddown" не является признанным встроенным именем функции.

select rounddown(25.227,2)

Мое требование - округлить значение до двух десятичных знаков

для ex: для значения 25.22789 результат должен быть 25.22

и округлить также

для ex: для значения 25.22789 результат должен быть 25.23

Любая помощь?

Заранее спасибо

5 ответов

Используйте третий параметр ROUND(), чтобы усечь, а затем CONVERT() до DECIMAL(x, 2), чтобы избавиться от нежелательных конечных нулей.

Скриншот демо

SELECT CONVERT(DECIMAL(10,2), ROUND(25.227, 2, 1)) RoundDown,
 CONVERT(DECIMAL(10,2), ROUND(25.227, 2, 0)) RoundUp

Результаты

| RoundDown | RoundUp |
|-----------|---------|
| 25.22 | 25.23 |


Я думаю, что вы ищете функцию CEILING() или floor(), например

select CEILING(25.227) //results in 26

(ИЛИ)

select FLOOR(25.227) //Results in 25

EDIT:

для ex: для значения 25.22789 результат должен быть 25.22

Вы можете попробовать, как показано ниже

select round(25.22789, 2, 2)

Это приведет к 25.22000


Для округления используйте простое математическое (одно десятичное место дальше, чем вы хотите округлить):

SELECT ROUND(25.22789 - 0.005, 2)

ВЫХОД 25.22

Для округления просто используйте ROUND:

SELECT ROUND(22.22789, 2)

ВЫХОД 25.23


КРУГЛЫЙ ФУНКЦИЯ

Вы можете использовать SELECT ROUND(@num, 2, 1)

В соответствии с ROUND описание:

ROUND ( numeric_expression , length [ ,function ] )

Если функция опущена или имеет значение 0 (по умолчанию), numeric_expression округляется. Когда указано значение, отличное от 0, numeric_expression усекается.

РЕЗУЛЬТАТ

25.22

CHARINDEX и LEFT

В качестве альтернативы вы можете использовать CHARINDEX и LEFT в следующем, если вы хотите сделать "ROUND DOWN" и использовать простой ROUND для выполнения "ROUND UP"

DECLARE @num DECIMAL(16,3) = 25.227
SELECT LEFT(@num,CHARINDEX('.',@num)+2) as [RoundDown],
 ROUND(@num,2) as [RoundUp]

РЕЗУЛЬТАТ

RoundDown RoundUp
25.22 25.23

UPDATE

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

SELECT ROUND(22.22289 + 0.005, 2) as [RoundUp1]

РЕЗУЛЬТАТ

25.23

DEMO

Вы можете проверить его на SQL FIDDLE


Также вы можете использовать CAST:

declare @num decimal(18,5) = 22.22719
 select @num, CAST(@num as decimal(18,3))

licensed under cc by-sa 3.0 with attribution.