情况是这样滴:
用户输入一些字串,代表箱数,比如:‘A1-A12’,'A14-A25','A26'
很明显‘A1-A12’,代表12箱,'A14-A25'也代表12箱,'A26'只代表1箱
但怎么得到代表的箱数?用户有可能输入‘AB1-AB12’我现在用select substr('A14-A25',-2,2)-substr('A14-A25',2,2) from dual 这样OK,
但‘A1-A12’这个字串就不行了。。
其实就是怎么找到中间的 - 比较重要,然后就可以判断'A26'这种箱号了一下忘了。。求救下~!
用户输入一些字串,代表箱数,比如:‘A1-A12’,'A14-A25','A26'
很明显‘A1-A12’,代表12箱,'A14-A25'也代表12箱,'A26'只代表1箱
但怎么得到代表的箱数?用户有可能输入‘AB1-AB12’我现在用select substr('A14-A25',-2,2)-substr('A14-A25',2,2) from dual 这样OK,
但‘A1-A12’这个字串就不行了。。
其实就是怎么找到中间的 - 比较重要,然后就可以判断'A26'这种箱号了一下忘了。。求救下~!
解决方案 »
- ORACLE过一天后,已有的连接有效,但新连接有问题
- 数据库值中的空格问题
- PL/Sql 左边的table里面含许多表,我就建了两张表,默认表都n张
- 关于面试方面的。。 HR面试过了。还要进行综合面试。。 这是什么面试 谢谢
- 跪求 社交网站数据库设计(类型人人网,FACEBOOK)
- orcale的资料档案库和数据库有什么不同啊??
- 求助:Enterprise Manager 无法继续。最可能的原因是无法检索数据库会话信息, 或 EM 无法处理用户调用的书签。 按“确定”即可继续。
- 在.NET下我用PLSQL Developer连接oracle数据库,以前好好的,但是打完系统补丁就连接不上了,但是用java程序就可以连接上,我的oracle9i的数
- Oracle商品和图片表的一对多设计要如何设计?
- backup anytable
- 这样的要求怎么去实现呢?
- sql 如何获取oracle中clob的值
注意:如果String2在String1中没有找到,instr函数返回0. 应用于:Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
举例说明:select instr('abc','a') from dual; -- 返回 1
select instr('abc','bc') from dual; -- 返回 2
select instr('abc abc','a',1,2) from dual; -- 返回 5
select instr('abc','bc',-1,1) from dual; -- 返回 2
select instr('abc','d') from dual; -- 返回 0
regexp_replace(replace('A1-A26','A',''),'(.+)\-(.+)','\2')-
regexp_replace(replace('A1-A26','A',''),'(.+)\-(.+)','\1')+1 from dual
/
和 SELECT instr('A14-A25','-',-1,1) FROM DUAL返回的值都是4?
- substr('A1-A12',2,length(instr('A1-A12','-','1'))-1)
from dual;
select substr('A1-A12',2,length(instr('A1-A12','-','1'))-1) from dual 这个是空值。。
--写得有点复杂 ,等下在写个
SQL>
SQL> with tb as
2 (select 'A1-A12' str from dual union all
3 select 'A14-A25' from dual union all
4 select 'A26' from dual)
5 select decode(sign(abs(substr(regexp_replace(str,'[[:alpha:]]',''),1,
6 decode(sign(instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)),1,instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)-1,3
7 ))-
8 substr(regexp_replace(str,'[[:alpha:]]',''),
9 decode(sign(instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)),1,instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)+1,1
10 )))),1,abs(substr(regexp_replace(str,'[[:alpha:]]',''),1,
11 decode(sign(instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)),1,instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)-1,3
12 ))-
13 substr(regexp_replace(str,'[[:alpha:]]',''),
14 decode(sign(instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)),1,instr(regexp_replace(str,'[[:alpha:]]',''),'-',1)+1,1
15 ))),0,1)
16 from tb
17 /
DECODE(SIGN(ABS(SUBSTR(REGEXP_
------------------------------
11
11
1
select substr('A1-A12',2,length(instr('A1-A12','-',-1,1))) from dual
--你看,这是两个的。
----如果-1就是8,如果是+1就是4
SQL> SELECT instr('A14-A33-A25','-',-1,1) FROM DUAL;INSTR('A14-A33-A25','-',-1,1)
-----------------------------
8嗯因为你只有一个‘-’这样符号,从左到右,从右到左都是他。
ORA-00904: "REGEXP_REPLACE": invalid identifier
SQL> with tb as
2 (select 'A1-A12' str from dual union all
3 select 'A14-A25' from dual union all
4 select 'A26' from dual),
5 tb2 as (select trim(translate(str,translate(str,'0123456789','#'),' ')) str2 from tb)
6 select abs(decode(sign(instr(str2,' ',1)),1,substr(str2,1,instr(str2,' ',1)-1),0,substr(str2,1)+1)-
7 decode(sign(instr(str2,' ',1)),1,substr(str2,instr(str2,' ',1)+1),0,substr(str2,1)))
8 from tb2
9 /
ABS(DECODE(SIGN(INSTR(STR2,'',
------------------------------
11
11
1
2 regexp_substr('AB12-AB23', '[0-9]+', 1, 2) - regexp_substr('AB12-AB23', '[0-9]+') + 1)
3 FROM dual;
DECODE(REGEXP_SUBSTR('AB12-AB2
------------------------------
12
SQL>
SQL> SELECT decode(regexp_substr('AB12', '[0-9]+', 1, 2),NULL,1,
2 regexp_substr('AB12', '[0-9]+', 1, 2) - regexp_substr('AB12', '[0-9]+'))
3 FROM dual;
DECODE(REGEXP_SUBSTR('AB12','[
------------------------------
1
SQL>