不用循环如何求出某字符串中的半角数字的位置
请问如何能够让程序在不使用循环的情况下找出某字符串中的半角数字的位置
如: "西风路2号",要在不使用循环的情况下返回 数字'2'出现的位置,
即:4 ???
谢谢!
问题点数:50、回复次数:17Top
1 楼GerryYang(轻尘)回复于 2004-12-01 08:26:40 得分 5
在VB里面可以,但是在oracle里面不知道.Top
2 楼ORARichard(没钱的日子......)回复于 2004-12-01 08:29:54 得分 0
这种情况复杂,最好写函数。如果在你的字符串中只有一个半角字符且只出现一次,还好做些。Top
3 楼zmgowin(hermit)回复于 2004-12-01 08:38:16 得分 15
08:43:09 SQL> select instr('西风路2号',substr(replace(translate('西风路2号',repl
ace(translate('西风路2号','0123456789',' '),' ',''),' '),' ',''),1,1)) from dual
;
INSTR('西风路2号',SUBSTR(REPLACE(TRANSLATE('西风路2号',REPLACE(TRANSLATE('西风路
2号','0123456789',''
--------------------------------------------------------------------------------
--------------------
4
已用时间: 00: 00: 00.16Top
4 楼wupangzi(无本之木)回复于 2004-12-01 08:47:40 得分 0
zmgowin(隐者(龙祖宗))的想法是好的,但是半角的东西还很多比如字母等等!
我觉得要写函数!Top
5 楼wupangzi(无本之木)回复于 2004-12-01 08:49:04 得分 0
哦,我看错了,原来版主只要求,数字!SORRY!zmgowin(隐者(龙祖宗))Top
6 楼ORARichard(没钱的日子......)回复于 2004-12-01 08:54:35 得分 0
西风路2-1
西风路2号01室
西风路23号
.
.
.
这么多种格式,怎么用一句话写Top
7 楼asia2158()回复于 2004-12-01 13:35:38 得分 0
只要找到第一个出现的数字即可Top
8 楼ORARichard(没钱的日子......)回复于 2004-12-01 13:54:01 得分 0
select instr(translate('西风路2号','0123456789','~~~~~~~~~~'),'~') from dual;Top
9 楼ORARichard(没钱的日子......)回复于 2004-12-01 13:56:03 得分 0
'~'可以用任何在字符串中不会出现的字符代替Top
10 楼ORARichard(没钱的日子......)回复于 2004-12-01 13:58:25 得分 0
or:
select instr(translate('西风路2号','0123456789','0'),'0') from dual;
这样最好
Top
11 楼qiaozhiwei(乔)回复于 2004-12-01 13:59:10 得分 15
SELECT INSTR(TRANSLATE('西风路2号','1234567890','0000000000'),'0') FROM DUAL;
INSTR(TRANSLATE('西风路2号','1234567890','0000000000'),'0')
-----------------------------------------------------------
4Top
12 楼qiaozhiwei(乔)回复于 2004-12-01 14:02:57 得分 0
ORARichard(没钱的日子好难过啊)
or:
select instr(translate('西风路2号','0123456789','0'),'0') from dual;
这样最好
------------------------------------------------------------------------------
这个不行,TRANSLATE 是按位匹配的,如果第三个参数是'0',则出现123456789是都会匹配为NULL,
这样的话就找不到字符,例如上面这个查询,结果为:
INSTR(TRANSLATE('西风路2号','1234567890','0'),'0')
--------------------------------------------------
0
Top
13 楼asia2158()回复于 2004-12-01 14:14:25 得分 0
非常感谢大家的支持,我的问题可能还没有说清楚,是这样:
一张表:STREE:内有路名,详细地址两个主要字段:
路名 详细地址
西风路 1号
(这是正常的记录)
西风路2号-------(这是不正常的)
录入的人吧路名和详址全写到"详细地址"字段里去了,所以现在要做个过程,用游标去把记录一条一条取出来,然后处理,而数字是分解这类记录的唯一标识,但由于某种原因,不能用循环.
我也觉得要求有点变态,可是没办法,请大家帮帮我Top
14 楼ORARichard(没钱的日子......)回复于 2004-12-01 14:35:11 得分 0
to qiaozhiwei(乔)
你说的没错。是我的笔误,我的第一句中还是10个空格呢。可这句改漏了。Top
15 楼ORARichard(没钱的日子......)回复于 2004-12-01 14:41:05 得分 15
update stree set 路名=substr(详细地址,1,INSTR(TRANSLATE(详细地址, '1234567890', '0000000000'), '0')),详细地址=substr(详细地址,INSTR(TRANSLATE(详细地址, '1234567890', '0000000000'), '0'),length(详细地址)-INSTR(TRANSLATE(详细地址, '1234567890', '0000000000'), '0')+1) where INSTR(TRANSLATE(详细地址, '1234567890', '0000000000'), '0')>0;Top
16 楼asia2158()回复于 2004-12-01 14:54:32 得分 0
好,我去试试Top
17 楼asia2158()回复于 2004-12-04 14:35:51 得分 0
谢谢大家!!!Top




