ORACLE单行函数与多行函数之二:字符函数示例
ORACLE单行函数与多行函数之二:字符函数示例
1.大小写转换
initcap(char) 把每个字符串的首字符换成大写
lower(char) 整个字符串转换成小写
upper(char) 整个字符串转换成大写
BYS@bys1>Select lower(ename),upper(ename),initcap(ename) from emp where rownum<3; LOWER(ENAM UPPER(ENAM INITCAP(EN ---------- ---------- ---------- smith SMITH Smith allen ALLEN Allen 2.字符连接CONCAT和|| CONCAT (char1, char2) 连接char1和char2,注意:CONCAT只能连接两个字符串,连接三个将报错。 BYS@bys1>select ename,job,ename,concat(ename,job) from emp where rownum<3; ENAME JOB ENAME CONCAT(ENAME,JOB) ---------- --------- ---------- ------------------- SMITH CLERK SMITH SMITHCLERK ALLEN SALESMAN ALLEN ALLENSALESMAN BYS@bys1>select ename,job,ename,concat(ename,job,ename) from emp where rownum<3; select ename,job,ename,concat(ename,job,ename) from emp where rownum<3 * ERROR at line 1: ORA-00909: invalid number of arguments ||连接符,一大优势是可以在连续符中间添加指定的字符 BYS@bys1>select ename,job,ename,ename||ename||job from emp where rownum<3; ENAME JOB ENAME ENAME||ENAME||JOB ---------- --------- ---------- ----------------------------- SMITH CLERK SMITH SMITHSMITHCLERK ALLEN SALESMAN ALLEN ALLENALLENSALESMAN BYS@bys1>select ename,job,ename,'mingzi '||ename||ename||' gongzuo '||job from emp where rownum<3; ENAME JOB ENAME 'MINGZI'||ENAME||ENAME||'GONGZUO'||JOB ---------- --------- ---------- ----------------------------------------------- SMITH CLERK SMITH mingzi SMITHSMITH gongzuo CLERK ALLEN SALESMAN ALLEN mingzi ALLENALLEN gongzuo SALESMAN 3.求字符串的长度;length 字符串要单引 length--按照字,可以求字符串长度,也可以求数字的长度 lengthb--按字节 lengthc--unicode的长度 BYS@bys1>select ename,length(ename),sal,length(sal) from emp where rownum<5; ENAME LENGTH(ENAME) SAL LENGTH(SAL) ---------- ------------- ---------- ----------- SMITH 5 800 3 ALLEN 5 1600 4 WARD 4 1250 4 JONES 5 2975 4 SQL> select length('白不'),length('bai'), lengthb('白不'),lengthb('bai'),lengthc('白不'),lengthc('bai') from dual; LENGTH('白不') LENGTH('BAI') LENGTHB('白不') LENGTHB('BAI') LENGTHC('白不') LENGTHC('BAI') -------------- ------------- --------------- -------------- --------------- -------------- 2 3 6 3 2 3 4.截取,SUBSTR(string,start,count) 从start开始,截取count个。 如果不指定count,则默认截取到最后一个字符。如果start为负数,则从倒数第N个字符截取。 BYS@bys1>select substr('15912345678',4,8),substr('15912345678',4),substr('15912345678',-8,8) from dual; SUBSTR('15912345678',4,8) SUBSTR('15912345678',4) SUBSTR('15912345678',-8,8) ------------------------- ----------------------- -------------------------- 12345678 12345678 12345678 5.在右/右边填充字符 LPAD和RPAD BYS@bys1>select lpad('abc',5,'*'),rpad('abc',5,'%') from dual; LPAD( RPAD( ----- ----- **abc abc%% 6.删除左/右边的指定字符trim, LTRIM和RTRIM 从下面语句可以看出,只能删除最左或最或边同指定字符相同的字符,如有多个连续的同指定一样的字符,可以连续删除。 SQL> select ltrim('*a%%abc**a**','%'), ltrim('%%abc**a**','%'),rtrim('*a%%abc**a**','*'),rtrim('%%abc**a','*') from dual; LTRIM('*A%%ABC**A**','%') LTRIM('%%ABC**A**','%') RTRIM('*A%%ABC**A**','*') RTRIM('%%ABC**A','*') ------------------------- ----------------------- ------------------------- --------------------- *a%%abc**a** abc**a** *a%%abc**a %%abc**a 不指定字符时,默认过滤的为空格符 从下面语句可以看出,trim是默认是同时滤过两边的字符。 SQL> select length(ltrim(' abc ')),length(rtrim(' abc ')),length(trim(' abc ')) from dual; LENGTH(LTRIM('ABC')) LENGTH(RTRIM('ABC')) LENGTH(TRIM('ABC')) -------------------- -------------------- ------------------- 5 5 3 SQL> select trim(leading '*' from '**abc%%'),trim(trailing '%' from '**abc%%'),trim(both '%' from '%%abc%%'),trim( '%'from '%%abc%%') from dual; TRIM(LEADING'*'FROM'**ABC%%') TRIM(TRAILING'%'FROM'**ABC%%') TRIM(BOTH'%'FROM'%%ABC%%') TRIM('%'FROM'%%ABC%%') ----------------------------- ------------------------------ -------------------------- ---------------------- abc%% **abc abc abc 7.替换 REPLACE('string','s1','s2');string希望被替换的字符或变量,s1被替换的字符串,s2要替换的字符串 BYS@bys1>select replace('he love you','he','i') from dual; REPLACE('H ---------- i love you 8.instr:求子串在父串中的位置,0表示没有在父串中找到该子串。 如果一个字符串中有多个与子串对应的字符,只显示第一个查询到的字符。 instr('abcdabc','a','2') 从字符串的第2个字符开始搜索符合a的字符。不指定从第几个字符开始的话,默认从第1个字符开始搜索。 SQL>select instr('abcdabc','a','2'),instr('baabc','a'),instr('bbc','a') from dual; INSTR('ABCDABC','A','2') INSTR('BAABC','A') INSTR('BBC','A') ------------------------ ------------------ ---------------- 5 2 0