ORA-01722: invalid number
问题
invalid number 字符与数值不匹配
oracle 截取 ‘1-2’ 只需要’-'前面的
思路
一、问题提示
执行Oracle的sql语句提示【ORA-01722: invalid number】无效数字错误。
二、问题分析
2.1、类型不匹配
即数据库中字段的设计类型与插入、修改的类型不统一(比如字段设计是:float类型,但是插入或修改的内容确实字符串【‘a’】)
2.2、对字段数据进行函数操作
即对字段进行求和(SUM)、求平均数(AVG)等函数操作,但是字段的数据却不匹配,比如(对字符串数字【.12.5036】求和就会报错,正常应该是(12.5036))
2.3、对数据进行转换操作
即需要转换数据的类型,比如将字符串数值内容转为数字类型,如(to_number(‘.12.5036’)或to_number(‘a’))都会报错,但是【to_number(‘12.5036’)】则正确。
三、注意事项
①当我们在对数据进行操作时,需要特别注意数据的类型,认真处理好不同数据类型的内容,保证数据内容的完整准确。
②当我们碰到此类错误时,首先从涉及字段的数据类型和内容是否匹配、然后是对应的字符转换和函数操作开始逐一排查,循序渐进。
解决
使用Oracle的REGEXP_SUBSTR函数进行截取:
SELECT REGEXP_SUBSTR('1-2', '[^-]+') FROM dual;
这里,REGEXP_SUBSTR函数用于从字符串中按照正则表达式匹配并截取子字符串。正则表达式"[^-]+"的含义是匹配不包含’-'的一个或多个字符。
截取后
成功执行!