oracle语句实现截取数字前内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle语句实现截取数字前内容相关的知识,希望对你有一定的参考价值。

有一地址 XX镇XX村XXX街100号,通过语句截取数字“100”前的内容“XX镇XX村XXX街”赋值到后面一新字段。
地址长度不一,所以不要按长度截取。
地址有很多,还有XX镇XXXXXX村32号,XX镇XXXX路92号 各种长度及类型的地址,我要按数字截取。

就是遇见数字,提取数字前面的所有内容

Oracle 11g 版本:

select wmts_id wmts_id,
substr( wmts_area,1,case when (regexp_instr( wmts_area,'[0-9]',1,1))>0 then (regexp_instr( wmts_area,'[0-9]',1,1))-1
else length(wmts_area)
end
) wmts_simplify
from t_wnms_wmts

update t_wnms_wmts a
set a.wmts_simplify=( select b.wmts_simplify
from (select wmts_id wmts_id,
substr( wmts_area,1,
case when (regexp_instr( wmts_area,'[0-9]',1,1))>0 then (regexp_instr( wmts_area,'[0-9]',1,1))-1
else length(wmts_area)
end
) wmts_simplify
from t_wnms_wmts
) b
where a.wmts_id=b.wmts_id ) ;

自己 替换成你的表名和字段就行了!
参考技术A select substr(add,1,Instr(add,'100')- 1) from table

要更新的话就是

update table set add1 = substr(add,1,Instr(add,'100')- 1)追问

还有XX镇XXXXXX村32号,XX镇XXXX路92号 各种长度及类型的地址,我要按数字截取。

追答

还有XX镇XXXXXX村32号,XX镇XXXX路92号 各种长度及类型的地址,我要按数字截取。
就是要截取到32号,xx号之前的?这个号固定长度吗?一定是数字?

追问

就是遇见数字,提取数字前面的所有内容

追答

select substr(add,1,regexp_instr(add,'[0-9]')-1) from dual;

追问

恩,好像可以,那如何select 所有字段呢,包括这个新的字段。或者有办法把这个结果保存在这表的新字段中。

追答

update table set add1 = substr(add,1,regexp_instr(add,'[0-9]')-1)
add1是新字段

追问

恩,很赞,最后一个问题,能把数字以后的内容放到另一新字段吗?(包括数字)

也就是把地址以数字区分,数字前放一个字段,数字+数字后的内容放另一字段。

追答

..........我晕,前面都分出来了。后面还不好分啊。。。
update table set add1 = substr(add,1,regexp_instr(add,'[0-9]')-1),
add2=substr(add,regexp_instr(add,'[0-9]'))

本回答被提问者采纳
参考技术B 你的地址格式很固定吗?那你就直接insstr“街”的位置,然后截取不就可以了!追问

还有XX镇XXXXXX村32号,XX镇XXXX路92号 各种长度及类型的地址,我要按数字截取。

追答

你的Oracle是哪个版本的?支持正则表达式吗?

追问

oracle是10 在TOAD8里操作,我新手。

追答

select substr(add,1,length(add)-regexp_instr(add,'[0-9]')) from dual;
这个是正则表达式的做法,截取的是第一个数字出现之前的所有字符,但是要至少9i以上的版本才可以使用吧!我在PL/SQL里面测试了是OK的!

oracle中如何截取字符串中,某个字符前的字符串? 例如截取字符串210-1106000001中“-”前的字符串?

字符串中“-”前的长度不一定就是三码,有可能是4码或者5码?

oracle中,截取某个字符串前的字符需要用instr函数和substr函数共同完成。

工具:oracle 10g

步骤:

1、以截取字符串“210-1106000001”中“-”前的部分为例。

2、执行语句为:

select substr('210-1106000001',1,instr('210-1106000001','-')-1) from dual;

3、结果为:

instr函数语法:instr( string1, string2, start_position,nth_appearance )

参数含义:

substr函数语法:substr(strings|express,m,[n])

参数含义:

strings|express :被截取的字符串或字符串表达式。

m 从第m个字符开始截取。

n 截取后字符串长度为n。

参考技术A select substr(列, 1, instr(列, '-') -1) from 表。
例:
SQL> select substr('210-1106000001', 1, instr('210-1106000001', '-') -1) from dual;

SUBSTR('210-1106000001',1,INST
------------------------------
210

SQL> select substr('1210-1106000001', 1, instr('1210-1106000001', '-') -1) from dual;

SUBSTR('1210-1106000001',1,INS
------------------------------
1210

以上是关于oracle语句实现截取数字前内容的主要内容,如果未能解决你的问题,请参考以下文章

Oracle语句怎么截取和:之间的值?

oracle截取某一字符串中的全部数字作为另外一个查询语句中in的查询条件,怎么做

oracle 如何截取两个"-"之间的字符串

oracle中如何截取字符串中,某个字符前的字符串? 例如截取字符串210-1106000001中“-”前的字符串?

Oracle中如何截取字符串的后10位

从sql表里截取字符串中的日期