SQL Server 2008中带小数点的逗号数字

时间:2016-08-02 22:17:28

标签: sql-server sql-server-2008 tsql

我想将逗号括在varchar类型的数字中,并且只有一个小数点,没有汇总。

例如:

DECLARE @val varchar(50) = '12345.999'

我想要结果为:

12,345.9

到目前为止,我已经尝试过:

select convert(VARCHAR(15), cast(@val as money), 1)

结果:12,346.00

但它正在对价值进行四舍五入。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:3)

DECLARE @val varchar(50) = '12345.999'

SELECT LEFT(CONVERT(VARCHAR(15),CAST(@val AS MONEY),1),CHARINDEX('.',@val)-3) + SUBSTRING(@val,CHARINDEX('.',@val)-3,5)

答案 1 :(得分:2)

也许这会奏效。在转换为LEFT()MONEY之后,只需使用VARCHAR功能几次

DECLARE @val VARCHAR(50) = '12345.99999'

SELECT LEFT(CONVERT(VARCHAR(15),CAST(LEFT(@val,
                     CHARINDEX('.',@val,1)+1) AS MONEY),1),CHARINDEX('.',@val,1)+2)


Result:
12,345.9

** 修改 **

在考虑变量的数字可能更大的可能性之后,当有多个逗号(即123,412,345.999)时它将无效,因此我正在编辑以包含CASE语句:

DECLARE @val VARCHAR(50) = '123412345.99999'

SELECT LEFT( CONVERT(VARCHAR(15),   
                      CONVERT(MONEY 
                                ,LEFT(@val,  CHARINDEX('.',@val,1)+1)  
                              ,1)
                     ,1)
            , CHARINDEX('.',@val)+(CASE 
                                   WHEN LEN(LEFT(@val, CHARINDEX('.',@val)-1))>6 THEN 3 
                                   ELSE 2 
                                   END))