oracle 截取数据的最后4位可以使用substr函数,例如:
创新互联建站坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。10多年网站建设经验创新互联建站是成都老牌网站营销服务商,为您提供成都网站建设、网站设计、网站设计、H5页面制作、网站制作、品牌网站建设、微信平台小程序开发服务,给众多知名企业提供过好品质的建站服务。
select substr('HelloWorld',-4,4) value from dual;
返回结果:orld
从后面倒数第4位开始往后取4个字符。
扩展资料
substr函数格式使用介绍 (俗称:字符截取函数):
格式1: substr(string string, int a, int b);
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
格式2:substr(string string, int a) ;
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。
如果字段存的就是这个,那么这个应该是字符串吧,那么就分几步操作。
(1)定位,定位{和:的位置,从现在来看有两种可能,第一种
这是两个字段,分别是{12345:67:8}和{ABC:0:9},那就简单了{肯定是1,所以这个也就不需要定位了,只需要定位第一个冒号的位置。
定位的函数应该是instr
第二种:{12345:67:8}{ABC:0:9}是一个字段的内容,那就麻烦一些,不过也能做,希望不是这样的,因为这个就要麻烦很多了。正则倒是能做,不过正则都要测试,我可没有相应的环境做测试。这里也就不写了,如果是这种,那么自己翻一翻正则函数的用法,应该能写出来。
(2)截取,如果是第一种,那么定位了第一个冒号位置以后,用这个位置-2,也就是
instr(字段,':',1)-2这就是截取的长度,
从第二位开始截取,截取这个长度就可以substr(字段,2,instr(字段,':',1)-2)
这样的话,{12345:67:8}换算到内部就是substr({12345:67:8},2,5(7-2)),【7-2说明5的来源,第一个冒号在第7位】,截取出来就是12345
还是那句话,如果是第二种可能,那么就要找每一个{的位置,然后找在{后面距离最近的冒号的位置,然后再一个个的截取操作,正则应该可以操作,不过我还是那句话,需要测试,意思和这个截取函数差不多,自己好好理解一下应该就能操作了。
如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理。\x0d\x0a\x0d\x0a5个参数\x0d\x0a第一个是输入的字符串\x0d\x0a第二个是正则表达式\x0d\x0a第三个是标识从第几个字符开始正则表达式匹配。(默认为1)\x0d\x0a第四个是标识第几个匹配组。(默认为1)\x0d\x0a第五个是是取值范围:\x0d\x0ai:大小写不敏感;\x0d\x0ac:大小写敏感;\x0d\x0an:点号 . 不匹配换行符号;\x0d\x0am:多行模式;\x0d\x0ax:扩展模式,忽略正则表达式中的空白字符。\x0d\x0a\x0d\x0aSQL SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+');
SELECT substr('helloword',
-1,
5) from
dual
从右边开始截取5位。
Oracle
截取字符串
1.
SUBSTR:取子字符串,从“起始位置”开始,取“多少"个,当起始位置为负数的时候,从右边开始查找。
SUBSTR(源字符串,起始位置,要取多少位)
例:Select
SUBSTR('ORC+001',1,3)
From
dual;
返回的是“ORC”
Select
SUBSTR('ORC+001',-5,3)
From
dual;
返回的是“ORC”
2.
INSTR:默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。INSTR(源字符串,
目标字符串,
起始位置,
匹配序号)
例:Select
INSTR('ORC+001','+',1,1)
From
dual
;
返回的是"4",如果该字符串没有匹配字符返回的是“0”。
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。
oracle中的date类型字段,截取年份可用to_char函数。
工具:oracle 10g
步骤:
1、如emp表中有hiredate字段为date类型的数据。
2、截取其中的年份部分,用如下语句:
select empno,ename,job,mgr,to_char(hiredate,'yyyy'),sal,comm,deptno from emp;
3、运行后结果,可以看出年份已将截取出来了: