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)
.
我有以下表格:
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)
.