我有下表:
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编译错误:无效的数据类型规范(2> 0)
当我将十进制规格设置为(2,2)时,查询会生成错误
数字超出可表示范围:类型FIXED [SB1] {nullable},值 70000.000000
这里实际上发生了什么? CAST()语句有什么问题?
答案 0 :(得分:1)
decimal
的定义包括两个部分:
精度为0,表示没有数字。
如果只需要小数点右边的两位数字,请使用decimal(2, 2)
。
这对我来说似乎很危险。您不能表示1.00
,这可能是一个可能的值。因此,对于您的特定查询,我要使用的最节约的方法是decimal(3, 2)
。
根据您的错误,您可能至少需要decimal(9, 4)
。但是,为什么要数数呢?只需使用足够大的东西,例如(20, 4)
。