Oracle获取字符串中某字符前面的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle获取字符串中某字符前面的数字相关的知识,希望对你有一定的参考价值。

比如 1个 苹果2元
一盒饼干43元
一瓶茅台800元
求获取元前面的数字
2
43
800
求帮助哇
麻烦贴个sql,多多谢

利用下面的语句即可得到:

select NAME,TRIM(TRANSLATE(NAME, trim(TRANSLATE(NAME, '1234567890', ' ')), ' ')) from test1 ,test1是建的测试表

参考技术A select t.str,replace(regexp_substr(str,'[0-9]+元'),'元','') mony from t



测试:

sys@STARTREK> with t as (
  2  select '苹果2元' as str from dual
  3  union all
  4  select '一盒饼干43元' as str from dual
  5  union all
  6  select '一瓶茅台800元' as str from dual
  7  )
  8  select t.str,replace(regexp_substr(str,'[0-9]+元'),'元','') mony from t
  9  /

STR           MONY
------------- --------------------------
苹果2元       2
一盒饼干43元  43
一瓶茅台800元 800

参考技术B 思路:写函数,取元前面数字,根据ASC码追问

。。。一个sql能解决吗,函数很难麻烦

追答

create or replace function findNumber(inputStr varchar2)
return varchar2 is
i integer;
tmp varchar2(100);
begin
tmp := '';
i := InStr(inputStr,'元')-1;
while (InStr('0123456789',substr(inputStr,i,1)) > 1 and i >0) loop
tmp := substr(inputStr,i,1) || tmp;
i := i -1;
end loop;
return tmp;

end findNumber;

select findNumber(你的字段名) from 你的表名;

参考技术C 个人觉得正则表达式可以实现。 参考技术D 先查询出整个字段,然后做字符串截取操作追问

你贴个sql来看看??

oracle从某一个字符开始删除前面所有的字符

例如:‘海城客运公司|中型高一 ’ ,我想删除‘|’前面的所有字符,怎么处理啊?

参考技术A SELECT SUBSTR('海城客运公司|中型高一',
INSTR('海城客运公司|中型高一', '|', 1, 1) + 1) SR
FROM DUAL;

UPDATE TAB T
SET COL = SUBSTR(COL, INSTR(COL, '|', 1, 1) + 1)
WHERE COL LIKE '%|%';
COMMIT;本回答被提问者采纳
参考技术B select substr('海城客运公司|中型高一',instr('海城客运公司|中型高一','|',1,1)+1) from dual

以上是关于Oracle获取字符串中某字符前面的数字的主要内容,如果未能解决你的问题,请参考以下文章

数字转字符串,长度前面补0

如何对Oracle数据库表中某列的所有数据进行字符串操作?

oracle从某一个字符开始删除前面所有的字符

oracle截取某个字符串前面的字符串?

如何从oracle中的字符串中获取固定长度的数字

oracle 怎么样才能去掉字符串前面的零