sql常用函数-substr()
2016-07-17 23:48
在Oracle中可以使用substr函数对某个字符串进行截取。
substr函数的用法,取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串。
substr( string, start_position, [ length ] ) substr('目标字符串',开始位置,长度)
如:
substr('This is a test', 6, 2) would return 'is'
substr('TechOnTheNet', -6, 3) would return 'The'
字符串截取函数substr(strings|express,m,[n])
strings|express :被截取的字符串或字符串表达式;
m :从第m个字符开始截取 ;
n :截取后字符串长度为n 。
1.被截取的为字符串或字符串表达式
QUOTE: SQL> select substr(upper('abcde'),1,2) from dual;
SUBSTR(UPPER('ABCDE'),1,2)
--------------------------
AB
SQL> select substr('abcde',1,2) from dual;
SUBSTR('ABCDE',1,2)
-------------------
ab
2.如果m<0,则表示从右向左截取
(2.1 这里如果n>0,若n>=|m|,截取字符串长度为|m|个(从右向左截取);
2.2 若n<|m|,截取字符串长度为n个(从右向左截取) )如:
QUOTE: SQL> select substr('abcde',-4,2) from dual;
SUBSTR('ABCDE',-4,2)
--------------------
bc
SQL> select substr('abcde',-4,4) from dual;
SUBSTR('ABCDE',-4,4)
--------------------
bcde
SQL> select substr('abcde',-4,50) from dual;
SUBSTR('ABCDE',-4,50)
---------------------
bcde
2.3 如果m<0,n=0结果为NULL:
QUOTE: SQL> select substr('abcde',-4,0) from dual;
SUBSTR('ABCDE',-4,0)
--------------------
2.4 如果m<0,n<0结果为NULL:
SQL> select substr('abcde',-2,-1) from dual;
SUBSTR('ABCDE',-2,-1)
---------------------
3.如果n<=0,结果为0:
QUOTE: SQL> select substr('abcde',1,-4) from dual;
SUBSTR('ABCDE',1,-4)
--------------------
(此处与2.4有部分重复,请忽略。)
4.m,n只要有一个为NULL,那么结果为NULL
QUOTE: SQL> select substr('abcde',1,null) from dual;
SUBSTR('ABCDE',1,NULL)
----------------------
(n为空,m、n同时为空,这两种情况在这里不再一一举例。)
5.不用n参数时:
5.1 m=NULL里,结果为NULL
5.2 m>=0,结果为从m个字符开始截取到最后
QUOTE: SQL> select substr('abcde',null) from dual;
SUBSTR('ABCDE',NULL)
--------------------
SQL> select substr('abcde',0) from dual;
SUBSTR('ABCDE',0)
-----------------
abcde
5.3 m<0时,如果|m|<=被截取字符串的长度, 结果为从右向左截取|m|个字符
QUOTE: SQL> select substr('abcde',-2) from dual;
SUBSTR('ABCDE',-2)
------------------
de
5.4 如果|m|>被截取字符串的长度,结果为NULL
QUOTE: SQL> select substr('abcde',-6) from dual;
SUBSTR('ABCDE',-6)
------------------