sql - 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() 语句有什么问题?
解决方案
的定义decimal
有两个组成部分:
- “精度”是数字中小数位数的总数。
- “刻度”是小数点右边的数字。
精度为 0,表示没有数字。
如果您只想要小数点右侧的两位数,请使用decimal(2, 2)
.
这对我来说似乎很危险。您不能表示1.00
,这可能是一个可能的值。因此,我将使用的最节约方法是decimal(3, 2)
针对您的特定查询。
根据您的错误,您可能至少需要decimal(9, 4)
. 但为什么要费心数数呢?只需使用足够大的东西,例如(20, 4)
.
推荐阅读
- arrays - 如何将一组串行数据连续发送到多个函数中,数据随处更新?
- testing - 如何使用 cypress 拦截所有请求以测试响应状态
- python - How to animate chart with multiple y axis (python)
- python - 基于布尔值从一片多索引数据帧中删除行
- substrate - 运行 substrate-front-end-template$ yarn install 时出错
- python - 有没有办法组合这些字符串然后使每个逗号值成为一行?
- node.js - 如何生成刷新令牌的过期时间?
- firebase - 滚动时如何从 FireBase 存储中下载图像?
- pygments - 使用 pygments/python-markdown/django-markdownx 创建 Python HTML 代码片段
- java - 'OnClickListener' 是抽象的;无法实例化并且无法解析符号“v”