2016-10-09 3 views
0

tablesAA имеет две колонки, amount is decimal (28,10), amountscale is int.Как отличить столбцы к десятичному типу в SQL Server?

Мне нужно наложить amount на номер decimal [ (p[ ,s])].

«s» является динамическим из значения столбца amountscale, но нижний код вызывает синтаксическую ошибку.

Итак, как сделать литье amount в зависимости от значения amountscale?

select 
    amount, amountscale, 
    cast(amount as decimal(28, amountscanle)) as amount 
from tablesAA 
+1

Зачем вам нужно отличать целое число до десятичного на уровне базы данных? –

ответ

1

Увы, для cast(), масштаб и точность должны быть постоянными.

Если вы просто хотите, чтобы вывод данных с определенным масштабом и точностью, то вы можете преобразовать их в строку, используя str() (документально here):

select amount, amountscanle, 
     str(amount, 28, amountscanle) as amount2 
from tablesAA; 

Альтернативой является перебором подход:

select amount, amountscanle, 
     (case when amountscanle = 0 then cast(amount as decimal(28, 0) 
      when amountscanle = 1 then cast(amount as decimal(28, 1) 
      when amountscanle = 2 then cast(amount as decimal(28, 2) 
      . . . 
     end) as amount2 
from tablesAA;