SQL Cast无效的数据类型

时间:2019-12-06 17:07:35

标签: sql snowflake-data-warehouse

我有下表:

  

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

Employee Table

  

GRADE_ID = VARCHAR, GRADE_AMOUNT = INTEGER

Salary Table

我的查询:

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()语句有什么问题?

1 个答案:

答案 0 :(得分:1)

decimal的定义包括两个部分:

  • “精度”是数字中小数位数的总数
  • “小数位数”是小数点右边的数字。

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

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

这对我来说似乎很危险。您不能表示1.00,这可能是一个可能的值。因此,对于您的特定查询,我要使用的最节约的方法是decimal(3, 2)

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