- SQL code
Select * FROM Product_component_version
- Assembly code
1 NLSRTL 10.2.0.1.0 Production2 Oracle Database 10g Enterprise Edition 10.2.0.1.0 64bi3 PL/SQL 10.2.0.1.0 Production4 TNS for IBM/AIX RISC System/6000: 10.2.0.1.0 Productio
- SQL code
--mark2: 150|433199|001|ZX433199120814165311|1 --passselect nvl(max(SUBSTR(mark2,INSTR(mark2,'|', 1, 4))),0)+1 a_numfrom cpabg1.tb_pay_commi_info--ORA-01722: invaild numberselect nvl(max(SUBSTR(mark2,INSTR(mark2,'|', 1, 4))),0) a_numfrom cpabg1.tb_pay_commi_info--passselect to_number(SUBSTR(mark2,INSTR(mark2,'|', 1, 4))) a_numfrom cpabg1.tb_pay_commi_info--ORA-01722: invaild numberselect max(to_number(SUBSTR(mark2,INSTR(mark2,'|', 1, 4)))) a_numfrom cpabg1.tb_pay_commi_info
who can tell me ,why?[
------解决方案--------------------
select nvl(max(SUBSTR(mark2,INSTR(mark2,'|', 1, 4))),0)
返回的是 |1,所以不能+1
同理,
SUBSTR(mark2,INSTR(mark2,'|', 1, 4))返回的是 |1,所以不能to_number().
------解决方案--------------------
猜测你想要的结果是:改成SUBSTR(mark2,INSTR(mark2,'|', 1, 4)+1[b][/b])
------解决方案--------------------
猜测你想要的结果是:改成SUBSTR(mark2,INSTR(mark2,'|', 1, 4)+1)
------解决方案--------------------
如果为空可以加,但不是空返回字符串,当然不能加。。。
------解决方案--------------------
刚测了下 你的 SUBSTR(mark2,INSTR(mark2,'|', 1, 4)) 返回的是一个字符 ‘|1’不是数字 。你自己看清楚啊。
------解决方案--------------------
按照你的例子
SELECT NVL(MAX(SUBSTR('150|433199|001|ZX433199120814165311|1', INSTR('150|433199|001|ZX433199120814165311|1', '|', 1, 4))), 0) FROM dual
的值是‘|1’,自然是不能+1.
同理,‘|1’也不能to_number!!!