【问题标题】:How to store decimal values in SQL Server?如何在 SQL Server 中存储十进制值?
【发布时间】:2010-10-23 05:36:12
【问题描述】:

我试图找出 SQL Server 中列的十进制数据类型。我需要能够存储 15.5、26.9、24.7、9.8 等值

我将decimal(18, 0) 分配给列数据类型,但这不允许我存储这些值。

这样做的正确方法是什么?

【问题讨论】:

    标签: sql sql-server types decimal


    【解决方案1】:

    你可以试试这个

    decimal(18,1)
    

    数字的长度应为18位,小数点后的数字长度应为1,不能超过1。

    【讨论】:

      【解决方案2】:
      request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
      request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
      request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
      

      【讨论】:

        【解决方案3】:

        你应该使用如下:

        DECIMAL(m,a)
        

        m 是小数点的总位数。

        a 是小数点后的最大位数。

        http://www.tsqltutorials.com/datatypes.php 包含所有数据类型的描述。

        【讨论】:

        • 通常表示为 DECIMAL (p,s),其中 p 代表精度(数字中允许的最大位数),s 代表比例(小数点后允许的最大位数)。
        • 链接失效
        【解决方案4】:

        在大多数情况下,我使用十进制(9,2),它在 sql 十进制类型中占用最少的存储空间(5 个字节)。


        精度 => 存储字节数

        • 1 - 9 => 5
        • 10-19 => 9
        • 20-28 => 13
        • 29-38 => 17

        它可以存储从 0 到 9 999 999.99(前 7 位 + 小数点后 2 位 = 总共 9 位),对于大多数值来说足够大。

        【讨论】:

          【解决方案5】:

          DECIMAL(18,0) 将允许小数点后为 0 位。

          使用DECIMAL(18,4) 之类的东西应该就可以了!

          这为您提供了总共 18 位数字,其中小数点后有 4 位(小数点前有 14 位)。

          【讨论】:

          • @marc_s,在列数据类型为十进制(4,2)的情况下,是否有存储值“4.5”?当我插入该值时,它被修改为“4.50”
          • @ArunkumarTK: decimal(4,2) 允许小数点前 2 位和小数点后 2 位。 “4.5”可以毫无问题地存储 - 在数字上,“4.5”和“4.50”相同
          • @ArunkumarTK:WHY这些应该不同吗?两者都是“四个半” - 值 IS THE SAME。并且 NO 不要使用 varchar 来存储小数价值!!
          • 我知道这是一个古老的讨论,但在这种情况下不会是“4.05”和“4.5”@ArunkumarTK。
          • 是的,为什么 18 和 19 use 9 bytes 都如此受欢迎(例如默认的 (18,0))?
          【解决方案6】:

          其他答案是正确的。假设您的示例反映了您想要的全部可能性,那就是DECIMAL(3, 1)。或者,DECIMAL(14, 1) 将允许总共 14 位数字。考虑什么是足够的,这是你的工作。

          【讨论】:

            【解决方案7】:

            Decimal 的设置是它的精度和小数位数,或者在普通语言中,一个数字可以有多少位以及小数点右侧需要多少位。

            所以如果你将PI 放入Decimal(18,0) 中,它会被记录为3

            如果您将PI 放入Decimal(18,2),它将被记录为3.14

            如果将PI 放入Decimal(18,10),则记录为3.1415926535

            【讨论】:

              【解决方案8】:

              在 MySQL DB 中,decimal(4,2) 只允许输入总共 4 位数字。正如您在decimal(4,2) 中看到的那样,这意味着您总共可以输入 4 位数字,其中两位用于保留小数点后。

              所以,如果你在 MySQL 数据库中输入 100.0,它会显示类似“Out of Range Value for column”这样的错误。

              因此,您只能在这个范围内输入:从 00.00 到 99.99。

              【讨论】:

              • 为什么这是相关的,而问题明确指定了 Microsoft SQL Server?
              猜你喜欢
              • 2017-05-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-22
              • 1970-01-01
              • 2011-06-25
              • 1970-01-01
              • 2013-05-13
              相关资源
              最近更新 更多