Приведение к десятичной дроби с указанным количеством десятичных знаков - PullRequest
4 голосов
/ 25 мая 2011

Есть ли способ преобразовать число в десятичное число с указанным количеством десятичных разрядов? Я попробовал:

SELECT ...
       CAST(NumericField AS NUMERIC(15, @DecimalPlaces) AS NumericField,
       ...

Но это не сработало.


РЕДАКТИРОВАТЬ : я сделал ошибку и написал NUMBER вместо NUMERIC. Но вопрос стоит на месте: как я могу привести к NUMERIC с указанным количеством десятичных знаков?

Ответы [ 5 ]

3 голосов
/ 03 февраля 2015

declare @Value float = 123.4567, @RoundTo int = 2
select round(@Value * power(10, @RoundTo), 0) / power(10, @RoundTo)
2 голосов
/ 25 мая 2011
declare @decimal int=5
declare @decimalNum float =8931.0380106023125083

select ROUND(@decimalNum, @decimal,1)

Для конечных нулей используйте это:

declare @decimal int=5
declare @decimalNum float =8931.12

select STR(@decimalNum, 25, @decimal)

Обратите внимание, что вышеупомянутый выбор вернет тип varchar, а не десятичный, числовой, с плавающей запятой или любые другие типы.

1 голос
/ 19 января 2018

может быть, вы можете попробовать это: ОБЪЯВИТЬ @quantityPrecision INT = 5; set @quantityPrecision = yourvalue обновить таблицуA установить количество = раунд (количество, @ количествоPrecision) где XXX

1 голос
/ 25 мая 2011

В одну сторону ...

WITH T(NumericField, DecimalPlaces) AS
(
SELECT 1.234,10 UNION ALL
SELECT 1.234,3 
)
SELECT CASE DecimalPlaces 
        WHEN 15 THEN CAST(NumericField AS NUMERIC(30, 15))
        WHEN 14 THEN CAST(NumericField AS NUMERIC(30, 14))
        WHEN 13 THEN CAST(NumericField AS NUMERIC(30, 13))
        WHEN 12 THEN CAST(NumericField AS NUMERIC(30, 12))
        WHEN 11 THEN CAST(NumericField AS NUMERIC(30, 11))
        WHEN 10 THEN CAST(NumericField AS NUMERIC(30, 10))
        WHEN 09 THEN CAST(NumericField AS NUMERIC(30, 9))
        WHEN 08 THEN CAST(NumericField AS NUMERIC(30, 8))
        WHEN 07 THEN CAST(NumericField AS NUMERIC(30, 7))
        WHEN 06 THEN CAST(NumericField AS NUMERIC(30, 6))
        WHEN 05 THEN CAST(NumericField AS NUMERIC(30, 5))
        WHEN 04 THEN CAST(NumericField AS NUMERIC(30, 4))
        WHEN 03 THEN CAST(NumericField AS NUMERIC(30, 3))
        WHEN 02 THEN CAST(NumericField AS NUMERIC(30, 2))
        WHEN 01 THEN CAST(NumericField AS NUMERIC(30, 1))
        WHEN 00 THEN CAST(NumericField AS NUMERIC(30, 0))
        ELSE CAST(NULL AS SQL_VARIANT)
        END
FROM T      
1 голос
/ 25 мая 2011

Вы хотите преобразовать в десятичное число вместо числа ..

приведение (значение в десятичном виде (10,2)) 10 - это общее число, включая десятичные дроби, а 2 - количество десятичных дробей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...