oracle 字符串匹配函数,oracle常用字符处理函数总结

1. ASCII(c1) c1为字符串返回一个字符的ASCII码

SQL> select ascii('A'), ascii('a') from dual;

ASCII('A') ASCII('A')

---------- ----------

65         97

2. CHR(i) 是ASCII的逆函数,i只能是一个数字

SQL> select chr(65), chr(97)from dual;

C C

- -

A a

若()内不是一个数字会报出ORA-01722: invalid number的信息

SQL> select chr('a') from dual;

select chr('a') from dual

*

ERROR at line 1:

ORA-01722: invalid number

3. CONCAT(c1,c2) c1,c2都为字符串,将两个字符串连接起来,与连接符"||"相同

SQL> select concat('hel','lo') from dual;

CONCA

-----

hello

SQL> select 'hel' || 'lo' from dual;

'HEL'

-----

hello

若()字符串的数量大于2会下列错误,因此concat()函数只能连接两个字符串

SQL> select concat('a','b','c') from dual

select concat('a','b','c') from dual

*

ERROR at line 1:

ORA-00909: invalid number of arguments

4. INITCAP(c1) c1为字符串,该函数将每个单词的第一个之母的字母转换成大写,其它的之母小写返回,通过下面例子可以看出该函数以标点符号和特殊字符为分隔符。

SQL> select initcap('jerry,henry,jack') from dual;

INITCAP('JERRY,H

----------------

Jerry,Henry,Jack

SQL> select initcap('JeRRY,HENRY,jACK') from dual;

INITCAP('JERRY,H

----------------

Jerry,Henry,Jack

SQL> select initcap('jerry henry jack') from dual;

INITCAP('JERRYHE

----------------

Jerry Henry Jack

SQL> select initcap('jerry.henry.jack') from dual;

INITCAP('JERRY.H

----------------

Jerry.Henry.Jack

SQL> select initcap('jerry\henry\jack') from dual;

INITCAP('JERRY\H

----------------

Jerry\Henry\Jack

SQL> select initcap('jerry-henry-jack') from dual;

INITCAP('JERRY-H

----------------

Jerry-Henry-Jack

SQL> select initcap('jerry$henry$jack') from dual;

INITCAP('JERRY$H

----------------

Jerry$Henry$Jack

SQL> select initcap('jerry*henry*jack') from dual;

INITCAP('JERRY*H

----------------

Jerry*Henry*Jack

5. INSTR(c1,c2,[,i[,j]]) 其中c1,c2均为字符串,i,j为整数,该函数返回c2在c1中第j次出现的位置,搜索从c1的第i个字符开始。当没有发现所需要的字符时,则返回为0;若果i为负数,那么搜索从右到左开始,但是位置的计算还是从左到右,i和j的默认值为1

由于默认i和j的值都为1,并且默认从左往右边搜索,因此下面返回为2

SQL> select instr('database','a') from dual;

INSTR('DATABASE','A')

---------------------

2

SQL> select instr('database','a',1,1) from dual;

INSTR('DATABASE','A',1,1)

-------------------------

2

将i更改为-1,从右往左边查找,由于位置的计算还是从左到右边,因此下面返回为6而不是3

SQL> select instr('database','a',-1,1) from dual;

INSTR('DATABASE','A',-1,1)

--------------------------

6

从第五个字符开始搜索,返回为6

SQL> select instr('database','a',5) from dual;

INSTR('DATABASE','A',5)

-----------------------

6

从第五个字符开始搜索,查找第二个匹配a的值,可以看出database中第5个字符后面只有一个2,没有发现所需要的字符,因此返回为0

SQL> select instr('database','a',5,2) from dual;

INSTR('DATABASE','A',5,2)

-------------------------

0

从第三个字符开搜索,这里匹配条件成功返回

SQL> select instr('database','a',3,2) from dual;

INSTR('DATABASE','A',3,2)

-------------------------

6

5.instrb(1,c2,[,i[,j]])

与instr()函数一样,只是这里返回的是字节,对于单字节,instrb()效果等于instr()

6. LENGTH(c1)如果c1为字符串,则返回c1的长度;若果c1为null,那么将返回null值

SQL> select length('abc') from dual;

LENGTH('ABC')

-------------

3

SQL> select length(' ') from dual;

LENGTH('')

----------

1

SQL> select length('') from dual;

LENGTH('')

----------

SQL> select length('123') from dual;

LENGTH('123')

-------------

3

SQL> select length(123) from dual;

LENGTH(123)

-----------

3

8. LENGTHB(c1)

与length()一样,返回字节

9. LOWER(c1) 返回c1的小写字符

SQL> select lower('Hello') from dual;

LOWER

-----

hello

SQL> select lower('HELLO') from dual;

LOWER

-----

hello

10 upper(c1) 返回c1的大写

SQL> select upper('hello') from dual;

UPPER

-----

HELLO

SQL> select upper('Hello') from dual;

UPPER

-----

HELLO

11. LPAD(c1,i,c2) c1,c2均为字符串,i为整数,该函数用来在c1的左侧用c2字符串补足i,如果i小于c1的长度,那么只返回长度为i的c1字符,其它的被截去,c2的默认值为单空格

下面例子7小于字符串database的长度,因此只返回database前7个字符

SQL> select lpad('database','7','$') from dual;

LPAD('D

-------

databas

下面例子,填充了连个$符号

SQL> select lpad('database','10','$') from dual;

LPAD('DATA

----------

$$database

若不指定填充的字符,默认使用空格,因此下面例子在database前面填充了2个空格

SQL> select lpad('database','10') from dual;

LPAD('DATA

----------

database

验证是否为10个字符

SQL> select length(lpad('database','10')) from dual;

LENGTH(LPAD('DATABASE','10'))

-----------------------------

10

12. RPAD(c1,i,c2) 与LPAD相反,在c1的右边填充

SQL> select rpad('database','10','$') from dual;

RPAD('DATA

----------

database$$

SQL>

13. LRIM(c1,c2) 将c1左边字符去掉,使其第一个字符不在c2中,如果没有c2,则c1就不会改变

这个好像有点不好理解,我试了很久,终于弄明白啦,下面的例子从database字符串的左边开始搜索,只要第一个字符匹配了dta中的任意一个,就截去,然后再看第二个字符,第三个....当查找到第5个字符b的时候发现b不包含在dta中,这时候查找结束,返回不匹配的字符开始到结束的字符串

SQL> select ltrim('database','dta') from dual;

LTRI

----

base

如果包上面的dta改成bdta会是什么样呢,根据上面的总结,可想而知只会返回se,看结果

SQL> select ltrim('database','bdta') from dual;

LT

--

se

14. TRIM(c1 from c2) 该函数用于从字符串的头部、尾部或两端截特定字符,参数c1为要截去的字符,c2为原字符串

15. REPALCE(c1,[c2,c3]) c1,c2,c3都为字符串,将c1里面含有c2的字符串替换成c3

SQL> select replace('updodown','up','down') from dual;

REPLACE('U

----------

downdodown

16. substr(c1,i[,j]) c1为字符串,i,j为整数从第i位开始返回长度为j的字符串,如果j为空则直到串的尾部

SQL> select substr('database',5) from dual;

SUBS

----

base

SQL> select substr('database',5,3) from dual;

SUB

---

bas

17. TRANSLATE(c1,c2,c3) 将c1中与c2相同的字符以c3代替,

这个看起来与replace一样,translate()返回结果只是把d提换成m了,而不是mb

SQL> select translate('database','d','mb') from dual;

TRANSLAT

--------

matabase

而replace()是吧d替换成mb了

SQL> select replace('database','d','mb') from dual;

REPLACE('

---------

mbatabase

再看下面例子就明白了,把匹配da的替换成mb了,da是一个整体

SQL> select replace('database','da','mb') from dual;

REPLACE(

--------

mbtabase

将d用m替换,a用b替换,可以看出匹配的是单个字符,而且每个字符的位置一一对应。

SQL> select translate('database','da','mb') from dual;

TRANSLAT

--------

mbtbbbse

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值