2015-05-28 18 views
1

我有一张精确的货币表。如何从表中获得动态精度

Currency Precision InstituteId 
KWD  2   1 
QAR  3   2 

我有另一个表(回执)

CustomerName Amount(numeric(18,2)) InstituteId 
Ahemda  100.00    1 
Nirava  200.00    2 

我想这样

select Amount from Receipt where InstituteId = 1 

output : 100.00 

select Amount from Receipt where InstituteId = 2 

output : 200.000 

小数点显示为每货币明智输出......请给我suggestions.is有任何直接功能或任何隐含的对话?

+0

sql server有一个['money'](https://msdn.microsoft.com/en-us/library/ms179882.aspx)数据类型,你可能会觉得有用... –

回答

3

试试这个:

SELECT 
    CAST(FLOOR(r.[Amount]) AS varchar(18)) + 
    SUBSTRING(CAST(CAST(r.[Amount] AS numeric(18, 10)) - FLOOR(r.[Amount]) AS varchar(18)), 2, c.[Precision] + 1) AS [Amount] 
FROM 
    [Receipt] AS r 
    INNER JOIN 
    [Currency] c ON r.[InstituteId] = c.[InstituteId] 
3

如果您正在使用SQL Server 2012或以上,你可以使用FORMAT这样

DECLARE @Value NUMERIC(18,2)= 100.0 

;WITH CTE AS 
(
SELECT 2 as Precision UNION ALL SELECT 3 
) 
SELECT FORMAT(@Value,'.' + REPLICATE('0',Precision)) as value 
FROM CTE 

输出

value 
100.00 
100.000 

在你的情况下,将是

SELECT FORMAT(Amount ,'.' + REPLICATE('0',Precision)) as value 
FROM Receipt R inner join Currency C on R.InstituteId = C.InstituteId 
相关问题