2013-07-12 49 views
6

我现在有一个非常大的查询,我缺少一个元素...我需要将数据切成两个小数点(不需要舍入)。我谷歌搜索,但无法适应当前查询。SQL查询截断为两位小数?

SELECT 
    FechaDeSistema, Code, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN Cantidad 
    END as Debit, 
    CASE 
     WHEN CR_Socio = @SocioNum THEN Cantidad 
    END AS Credit, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN BalanceDebito 
     WHEN CR_Socio = @SocioNum THEN BalanceCredito 
    END AS Balance 
FROM 
    Ledger 
WHERE 
    (Debito_Cuenta = @Acct) OR 
    (Credito_Cuenta = @Ncct) 
ORDER BY 
    FechaDeSistema DESC 

我基本上需要截断信用和借方“情况”(是你怎么说?)到两个小数点。我怎样才能把它关掉?提前致谢!

回答

6

只需将它转换为精度较低的十进制数就可以切掉尾数。

cast(yourColumnName as decimal(19,2)) as desiredColumnName 

更具体到您的查询代码

SELECT 
    FechaDeSistema, 
    Code, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN cast(Cantidad as decimal(19,2)) 
    END as Debit, 
    CASE 
     WHEN CR_Socio = @SocioNum THEN cast(Cantidad as decimal(19,2)) 
    END AS Credit, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN cast(BalanceDebito as decimal(19,2)) 
     WHEN CR_Socio = @SocioNum THEN cast(BalanceCredito as decimal(19,2)) 
    END AS Balance 
FROM Ledger 
WHERE (Debito_Cuenta = @Acct) 
OR (Credito_Cuenta = @Ncct) 
ORDER BY FechaDeSistema DESC"; 
+0

那么,这是远远比我试图实施(一些大规模的混乱)更容易。谢谢埃文! –

+0

得等一两分钟才能批准答案;-) –

+0

没问题!还添加了一个更清晰的查询版本与正确的铸造。 –

5

会使铸件轮。如果你真的想截断你可以使用ROUND与截断选项,像这样..

DECLARE @MyNum DECIMAL(19,4) = 100.1294 

SELECT @MyNum 'MyNum' 
, CAST(@MyNum AS DECIMAL(19,2)) 'Cast will round' 
, ROUND(@MyNum,2,4) 'Round with truncate option' 
, CAST(ROUND(@MyNum,2,4) AS DECIMAL(19,2)) 'Better Truncate'