首页 > 解决方案 > SQL Casting 无效数据类型

问题描述

我有以下表格:

EMPLID =整数,F_NAME =VARCHAR,M_NAME =VARCHAR, SALARY_GRADE_ID =VARCHAR

员工表

GRADE_ID =VARCHAR,GRADE_AMOUNT =整数

工资表

我的查询:

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

标签: sqlsnowflake-cloud-data-platform

解决方案


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

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

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

如果您只想要小数点右侧的两位数,请使用decimal(2, 2).

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

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


推荐阅读