Как обрезать или добавить десятичные дроби на основе значений в поле - SQL-сервер - PullRequest
0 голосов
/ 11 мая 2018

Вот пример кода

declare @Currency table (ccy char(3),amount money)
insert into @Currency
values ('USD',12.34), ('AUD',12.34), ('INR',12.34)

Мне нужно показать вывод, как показано ниже,

when ccy = 'USD' then 12 (No decimals- cut off after decimal values) 

when ccy = 'AUD' then 12.34 (Two decimals)

when ccy = 'INR' then 12.3400 (Four decimals)

Ожидаемый вывод:

 ccy    amount

 USD    12
 AUD    12.34
 INR    12.3400

Пожалуйста, посоветуйте, как мне добиться этого в Цкле.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018
SELECT CCY,
       CASE WHEN CCY=USD THEN ROUND(AMOUNT, 0)
            WHEN CCY=AUD THEN ROUND(AMOUNT, 2)
            WHEN CCY=INR THEN ROUND(AMOUNT, 4)
       END
FROM @CURRENCY
0 голосов
/ 11 мая 2018

Вам необходимо преобразовать значение в строку.Для этого в SQL Server есть удобная функция: str():

select ccy,
       (case when ccy = 'USD' then str(amount, 10, 0)
             when ccy = 'AUD' then str(amount, 10, 2)
             when ccy = 'INR' then str(amount, 10, 4)
        end)
from @currency;

Вы также можете изучить функцию format().Это позволяет вам также включать символы валюты.

0 голосов
/ 11 мая 2018

Попробуйте:

declare @Currency table (ccy char(3),amount money)
insert into @Currency
values ('USD',1234), ('AUD',1234), ('INR',1234)

SELECT ccy,
    CASE WHEN ccy = 'USD' THEN CAST(CAST(amount AS NUMERIC(16,0)) AS VARCHAR)
         WHEN ccy = 'AUD' THEN CAST(CAST(amount AS NUMERIC(16,2)) AS VARCHAR)
         WHEN ccy = 'INR' THEN CAST(CAST(amount AS NUMERIC(16,4)) AS VARCHAR)
    END amount
FROM @Currency

Вывод:

ccy amount
USD 1234
AUD 1234.00
INR 1234.0000

Проверьте ответ в # SQL Fiddle

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