【问题标题】:What is the data type for Currency in SQL Server?SQL Server 中 Currency 的数据类型是什么?
【发布时间】:2015-12-06 11:17:23
【问题描述】:

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

例如:我想存储$11.23

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

【问题讨论】:

  • 任何numeric 数据类型都不会存储任何symbol 如果您放置符号,则必须解决很多问题才能计算该数量
  • 使用 money 没有意义,它不存储任何货币信息,范围有限,硬编码精度为 4。通常具有特定范围和精度的 decimal 是使用,例如decimal(9,2) 指定9 位数字,其中2 位是小数。 money 更多是为了与 VB6 和 OLEDB 兼容

标签: sql-server


【解决方案1】:
DECLARE @Price Decimal(18,2) = 11.23
SELECT FORMAT(@Price,'c','en-US') AS 'CURRENCY IN US Culture'

【讨论】:

    【解决方案2】:

    回答标题中的问题,货币的数据类型是MONEY

    money 数据类型将仅存储信息,不存储格式:在您的示例中,信息是 11.23,所以这就是保存到数据库中的内容。

    $ 符号是格式的一部分,因此不会存储到 money 字段中。

    通常的解决方案是为金额设置一个 MONEY 字段,为货币符号/名称设置一个 VARCHAR 字段。

    【讨论】:

    • money 没用,因为它存储任何货币信息。它只是一个精度低于decimal 的小数类型。它还不允许 允许您指定精度,例如,当值只允许有 2 位小数时。 21.3455 $ 是什么意思?
    • @PanagiotisKanavos 这是您的意见,我的意见不同。如果您需要更改精度和比例,则使用其他数据类型,但如果 MONEY了解其规格)适合,那么与任何其他数据类型一样,它可能是一个有效的选择。
    【解决方案3】:

    我认为存储货币的最佳方式是使用 NUMERICDECIMAL 数据类型,因为这些值参与计算。如果我们使用 NVARCHAR 来允许使用 ($) 等符号进行存储,则在 WHERE 子句中使用时会在计算过程中产生额外费用。 我们可以相应地选择精度和规模

    【讨论】:

      【解决方案4】:

      在 SQL 中应该是 DECIMAL(,)NUMERIC。 例如DECIMAL(20,2)

      【讨论】:

        猜你喜欢
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多