添加或投放到Money时,如何不对该值进行舍入?

时间:2017-10-11 03:51:54

标签: sql sql-server

SELECT cast(cast(Ac.Amount as decimal(18,2)) as varchar)FROM Assessmentsurchargedetails AC

结果是: 5010.00 27.6 100.00 1000.00 10000.00

我只想在点击一千个时添加逗号。

2 个答案:

答案 0 :(得分:1)

您可以通过三种方式完成此任务:

  • 场地方法
  • 整数转换方法
  • 子串方法

以下是一些例子

--Integer Conversion Method
    SELECT cast(cast(cast(Amount * 100 as int) / 100.0 as decimal(18,2)) as varchar) FROM Assessmentsurchargedetails AC

-- FLOOR Method
SELECT cast(cast(FLOOR(Ac.Amount*100)/100.0 as decimal(18,2)) as varchar) FROM Assessmentsurchargedetails AC

-- Substring Method, not the increased precision on the initial decimal cast
select LEFT(cast(cast(Ac.Amount as decimal(20,4)) as varchar), cast(LOG10(Amount) as int)+4) from Assessmentsurchargedetails ac

我决定通过从原始Assessmentsurchargedetails表中插入大约825万行到另一个表来为每个方法计时。整数转换方法需要18秒才能处理,而另外两个需要16秒。我建议使用子串方法的FLO​​OR方法,因为在大多数情况下,您不希望将最终结果转换为varchar,并且它是一种更具表现力的方法来解决问题。

关于添加逗号,评论者是正确的 - 使用FORMAT而不首先转换为varchar。在这种情况下,您的最终输出将是:

SELECT FORMAT(cast(FLOOR(Ac.Amount*100)/100.0 as decimal(18,2)), '#,##0.00') FROM Assessmentsurchargedetails AC

答案 1 :(得分:0)

REPLACE(CONVERT(varchar(20), (CAST(SUM(table.value) AS money)), 1), '.00', '')

使用此 REPLACE CONVERT 来获得所需的结果。 ' VARCHAR'不支持逗号。