根据 SQL92 规范,我可以将值 1 存储在精度 = 比例的字段中吗?

jca*_*314 4 datatypes sql-standard decimal

将数字 1 存储在定义为的字段中是否符合 SQL92 NUMERIC 3,3

关于什么 DECIMAL 3,3

这是否意味着精度是浮动小数位或静态的,即使它们都为零也必须有 3 个小数位?

Wor*_*DBA 5

精度是可以存储在小数位两侧的总小数位数。小数位数是小数点右边的小数位数总数,可以小于或等于精度。因此,可以存储在 DECIMAL(3,3) 或 NUMERIC(3,3) 中的最大值是 0.999。找出这一点的最简单方法是实际尝试一下。

使用 mysql 5.5.20 以下返回 0.999:

SET @val = (SELECT CAST(1 AS DECIMAL(3,3)));
SELECT @val; 
Run Code Online (Sandbox Code Playgroud)

而以下返回 1:

SET @val = (SELECT CAST(1 AS DECIMAL(3,0)));
SELECT @val;
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

编辑:我忘了提到在大多数平台上尝试执行上述操作会导致某种类型的算术溢出异常。例如,在 Microsoft SQL Server 2008 上运行的以下语句将引发错误:

DECLARE @val DECIMAL(3,3);
SET @val = 1;
SELECT @val;
Run Code Online (Sandbox Code Playgroud)