SQL 转换无效的数据类型

SQL Casting invalid data type

我有以下表格:

EMPLID=INTEGER, F_NAME=VARCHAR, M_NAME=VARCHAR, SALARY_GRADE_ID=VARCHAR

GRADE_ID=VARCHAR, GRADE_AMOUNT=INTEGER

我的查询:

SELECT L_Name, Grade_Amount, CAST(AVG(Grade_Amount) AS DECIMAL(0,2)) AS "Total by Last Name" FROM 
Employee INNER JOIN Salary_Grades ON Employee.Salary_Grade_id = Salary_Grades.Grade_Id 
GROUP BY L_Name, Grade_Amount;

遇到错误:

SQL compilation error: invalid data type specification (2>0)

当我将小数规范设置为 (2,2) 时,查询生成错误

Number out of representable range: type FIXED[SB1]{nullable}, value 70000.000000

这里到底发生了什么? CAST() 语句有什么问题?

decimal 的定义有两个组成部分:

  • "precision"是个小数位数。
  • "scale"是小数点右边的数。

精度为 0,表示没有数字。

如果只需要小数点右边两位,使用decimal(2, 2)

我觉得这很危险。您不能表示 1.00,这可能是一个可能的值。所以我会使用的最保守的是 decimal(3, 2) 用于您的特定查询。

根据您的错误,您可能至少需要 decimal(9, 4)。但为什么要数数呢?只需使用足够大的东西,例如 (20, 4).