Oracle 11g查询报错:ORA-01722: 无效数字。求解!

Oracle11g查询报错:Oracle11g查询报错:ORA-01722:无效数字01722.00000-"invalidnumber"*Cause:Thespecif... Oracle 11g查询报错:Oracle 11g查询报错:
ORA-01722: 无效数字
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.722. 00000 - "invalid number"
查询语句如下:
SELECT SUM(DECODE(TRUNC(TO_CHAR(hiredate,'year'),'yyyy'),'1980',1,0)) "1980",
SUM(DECODE(TRUNC(TO_CHAR(hiredate,'year'),'yyyy'),'1981',1,0)) "1981",
SUM(DECODE(TRUNC(TO_CHAR(hiredate,'year'),'yyyy'),'1982',1,0)) "1982"
FROM EMP
WHERE TRUNC(TO_CHAR(hiredate,'year'),'yyyy') IN ('1980','1981','1982');
求解!
展开
 我来答
殇忄路
推荐于2016-09-27 · TA获得超过560个赞
知道小有建树答主
回答量:478
采纳率:81%
帮助的人:330万
展开全部
TRUNC没法处理字符串,只能处理时间和数字,建议用substr截取字符串吧

substr(string1,1,2)
string1 需要截取的字符串 1表示起始位置 2 表示截取长度

按理说TO_CHAR(hiredate,'year')就能直接用了,或者用TO_CHAR(hiredate,'yyyy')
追问
谢谢。找到问题了,我把TO_CHAR和TRUNC位置写调了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wackyer
2014-12-03 · TA获得超过928个赞
知道小有建树答主
回答量:605
采纳率:71%
帮助的人:386万
展开全部
SUM(DECODE(TRUNC(TO_CHAR(hiredate,'year'),'yyyy'),'1980',1,0))
直接用
SUM(TO_CHAR(hiredate,'yyyy'),'1980',1,0)
追问
谢谢。找到问题了,我把TO_CHAR和TRUNC位置写调了。
追答
如果 hiredate 是时间格式,直接用 to_char 就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式