Oracle中to_char函数使用月份年份及invalid number报错解决问询
Oracle中to_char处理字符串日期报错invalid number的解决方案
报错原因
to_char() 函数的第一个入参要求为日期类型或数字类型,你直接传入字符串'Jul-2020'时,Oracle会尝试将字符串隐式转换为数字/日期,隐式转换规则和你传入的字符串格式不匹配,就会抛出invalid number错误。
解决方案
你需要先把字符串格式的时间转换为日期类型,再调用to_char()输出目标格式:
- 用
to_date()将'Jul-2020'转换为日期,注意要匹配原始字符串的格式掩码,同时指定日期语言避免英文月份识别失败:to_date('Jul-2020', 'Mon-YYYY', 'nls_date_language=english') - 在外层嵌套
to_char()转换为你需要的MM-YYYY格式
最终可用代码
to_char(to_date('Jul-2020', 'Mon-YYYY', 'nls_date_language=english'), 'MM-YYYY')
注意事项
- 不要省略
to_date()的格式掩码,避免依赖数据库默认格式,出现跨环境运行报错的问题 - 如果你的数据库默认语言为英文,可省略
nls_date_language=english参数,保留该参数兼容性更强
内容的提问来源于stack exchange,提问作者Crazy Mike
相关产品推荐
相关产品推荐

