SQL Server中货币的数据类型是什么?

10

在SQL Server中,货币值的数据类型是什么?

例如:我想存储 $11.23

我可以使用货币类型,并且它将存储 $ 符号吗?


1
任何“数字”数据类型都不会存储任何“符号”,如果您输入符号,计算该金额将会遇到很多问题。 - wiretext
可能是货币值的最佳数据类型的重复问题。 - Aaron Critchley
可能是在SQL Server中,你应该选择MONEY还是DECIMAL(x,y)数据类型?的重复问题。 - Panagiotis Kanavos
使用“money”没有任何意义,它不存储任何货币信息,具有有限的范围和硬编码精度为4。通常使用具有特定范围和精度的“decimal”,例如“decimal(9,2)”指定9个数字,其中有2个小数位。“money”更多是为了与VB6和OLEDB兼容而不是其他任何东西。 - Panagiotis Kanavos
4个回答

11
DECLARE @Price Decimal(18,2) = 11.23
SELECT FORMAT(@Price,'c','en-US') AS 'CURRENCY IN US Culture'

4
回答标题中的问题,货币数据类型为 MONEYmoney 数据类型仅存储信息,不包含格式:在您的例子中,信息是 11.23,这就是保存到数据库中的内容。
美元符号 $ 是格式的一部分,因此它不会存储到 money 字段中。
通常的解决方案是有一个用于金额的 MONEY 字段和一个用于货币符号/名称的 VARCHAR 字段。

3
money 不太有用,因为它不会存储任何货币信息。它只是一个小数类型,比decimal精度低。它也不会允许您指定精度,例如当值只允许有2个小数位时。 21.3455 $ 是什么意思? - Panagiotis Kanavos
2
@PanagiotisKanavos,那是你的观点,我的不同。如果需要更改精度和比例,则可以选择其他数据类型,但如果“MONEY”(了解其规格)适合,则可以作为任何其他数据类型的有效选择。 - Paolo
1
https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_money - Aswath

3

我认为存储货币的最佳方式是使用NUMERICDECIMAL数据类型,因为这些值参与计算。如果我们使用NVARCHAR允许存储符号(如$),则在WHERE子句中使用时会导致额外的计算成本。

我们可以根据需要选择精度和比例


0

在SQL中应该使用DECIMAL(,)或者NUMERIC。 例如:DECIMAL(20,2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接