如何在SQL Server中存储十进制值?

Ale*_*lex 266 sql sql-server types decimal

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

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

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

mar*_*c_s 501

DECIMAL(18,0) 将允许小数点后的0位数.

使用类似的东西DECIMAL(18,4)应该做得很好!

这给你总共18位数,其中4位小数点后面(和小数点前14位).

  • @ArunkumarTK:***为什么***应该不同?两者都是"四个半" - 值**是相同的**.并且***NO***不使用`varchar`来存储小数值! (3认同)
  • 是的,当18和19都使用9个字节时,为什么18如此受欢迎(例如默认值(18,0))(https://docs.microsoft.com/zh-cn/sql/t-sql/data-类型/小数和数字交易SQL)? (2认同)

DFo*_*k42 135

你应该使用如下:

DECIMAL(m,a)
Run Code Online (Sandbox Code Playgroud)

m 是小数可以包含的总位数.

a 是小数点后可以有的最大位数.

http://www.tsqltutorials.com/datatypes.php包含所有数据类型的说明.

  • 通常用DECIMAL(p,s)表示,其中p代表精度(一个数字中的最大允许位数),而s代表小数位数(小数点后的最大允许位数)。 (3认同)
  • 链接已失效 (2认同)

小智 42

设置Decimal的精度和比例或正常语言,数字可以有多少位数,小数点右边有多少位数.

所以,如果你把PIDecimal(18,0)将被记录为3

如果你把PIDecimal(18,2)将被记录为3.14

如果你把PIDecimal(18,10)被记录为3.1415926535.


小智 35

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


精度=>存储字节

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

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


Bid*_*dut 7

你可以试试这个

decimal(18,1)
Run Code Online (Sandbox Code Playgroud)

数字长度应该是18.小数点后面的数字长度应该只有1而不能超过1.


小智 6

在MySQL DB中decimal(4,2),只允许输入4位数字.如您所见decimal(4,2),这意味着您可以输入总共4位数,其中两位数字用于保留小数点后.

因此,如果在MySQL数据库中输入100.0,它将显示"列超出范围值"之类的错误.

因此,您只能输入此范围:从00.00到99.99.

  • 为什么这是相关的,而问题明确指定了 Microsoft SQL Server? (3认同)