将SQL Server数据类型decimal与逗号后的15位数混淆

vq8itlhq  于 2023-02-15  发布在  SQL Server
关注(0)|答案(1)|浏览(155)

我有表的结构如下:

Table1 (
   id int NULL,
   description varchar(50) null,
   rate decimal(18,15) NULL
)

当我测试插入数据到表中时,问题值如下:

insert into Table1 (id, description, rate)
values (1, 'My Room Upstair',  38397.0893181818)

错误是这样的:
消息8115,级别16,状态8,第1行将numeric转换为数据类型numeric时发生算术溢出错误。
但是当我使用浮点数据类型时,数据插入成功,但是速率值变成了不同的值。
我需要建议...
十进制数据类型问题求解

lp0sw83n

lp0sw83n1#

问题是您没有正确使用decimal数据类型。
数据类型定义如下decimal(a, b)

a用于指定值中的位数。默认值为18,但您可以选择1(最小值)和38(最大值)之间的任意数字。
B用于表示小数点后的位数。默认值为0,但您可以指定在最小值和最大值之间进行选择,这两个值分别为1和38。只有同时指定了a,才能指定b。它必须等于或小于a

在示例中decimal(18,15),您可以插入一个18位长的数字,小数点前3位,小数点后15位。38397.0893181818在小数点前有5位,这就是您得到错误的原因。因此,如果您需要添加38397.0893181818,您需要decimal(15,10),因为该数有15位,其中10位在小数点之后。

相关问题