jcalfee314 Asked: 2012-08-06 06:05:42 +0800 CST2012-08-06 06:05:42 +0800 CST 2012-08-06 06:05:42 +0800 CST 根据 SQL92 规范,我可以将值 1 存储在 precision = scale 的字段中吗? 772 将数字 1 存储在定义为的字段中是否符合 SQL92 NUMERIC 3,3? 怎么样DECIMAL 3,3? 这是否意味着精度是浮动小数位或静态必须有 3 位小数,即使它们都为零? sql-standard datatypes 1 个回答 Voted Best Answer World Wide DBA 2012-08-06T06:46:58+08:002012-08-06T06:46:58+08:00 精度是小数点两边可以存储的小数位数的总数。小数位是小数点右边小数位数的总和,可以小于或等于精度。因此,可以存储在 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; 而以下返回 1: SET @val = (SELECT CAST(1 AS DECIMAL(3,0))); SELECT @val; 我希望这有帮助。 编辑:我忘了提及在大多数平台上尝试执行上述操作将导致某种类型的算术溢出异常。例如,在 Microsoft SQL Server 2008 上运行的以下语句将引发错误: DECLARE @val DECIMAL(3,3); SET @val = 1; SELECT @val;
精度是小数点两边可以存储的小数位数的总数。小数位是小数点右边小数位数的总和,可以小于或等于精度。因此,可以存储在 DECIMAL(3,3) 或 NUMERIC(3,3) 中的最大值是 0.999。找出这一点的最简单方法是实际尝试一下。
使用 mysql 5.5.20 以下返回 0.999:
而以下返回 1:
我希望这有帮助。
编辑:我忘了提及在大多数平台上尝试执行上述操作将导致某种类型的算术溢出异常。例如,在 Microsoft SQL Server 2008 上运行的以下语句将引发错误: