单行函数
单行函数分类
- 字符操作函数
- 数字操作函数
- 日期操作函数
- 数据类型转换函数
- 综合数据类型函数
语法:
函数名[(参数1,参数2,…)]
其中的参数可以是以下之一:
–用户定义的变量
–变量
–列名
–表达式
实验12:操作字符串的函数
字符函数:主要指参数类型是字符型,不同函数返回值可能是字符型或数字类型。
大小写操作函数
–LOWER LOWER(列名|表达式):全小写
–UPPER UPPER(列名|表达式) :全大写
–INITCAP INITCAP(列名|表达式) :首字母大写
字符串操作函数
–CANCAT CONCAT(列1|表达式1,列2|表达式2):字符串连接
–SUBSTR SUBSTR(列名|表达式,m[,n]):字符串截取
–LENGTH LENGTH(列名|表达式):返回字符串长度
–INSTR INSTR(列名|表达式,’string’, [,m], [n] ) :返回一个字符串在另一个字符串中的位置。
–TRIM TRIM([leading|trailing|both, ]trim_characterFROM trim_source) :去掉左右两边指定字符。
–REPLACE REPLACE (文本, 查找字符串, 替换字符串):替换字符串
–LPAD LPAD(列名|表达式,n,‘string’) :左填充
–RPAD RPAD(列名|表达式, n,‘string’) :右填充
lower,upper,initcap字符串的大小写操作
SQL> select lower(ename),upper(ename),initcap(ename) from emp;
LOWER(ENAM UPPER(ENAM INITCAP(EN
---------- ---------- ----------
smith SMITH Smith
allen ALLEN Allen
ward WARD Ward
jones JONES Jones
martin MARTIN Martin
blake BLAKE Blake
clark CLARK Clark
king KING King
turner TURNER Turner
james JAMES James
ford_a FORD_A Ford_A
miller MILLER Miller
已选择12行。
SQL> select lower('mf TR'),upper('mf TR'),initcap('mf TR') from dual;
LOWER UPPER INITC
----- ----- -----
mf tr MF TR Mf Tr
dual是虚表,让我们用表的形式来访问函数的值。
concat将两个字符串连接到一起
SQL> select ename,job,concat(ename,job) from emp;
ENAME JOB CONCAT(ENAME,JOB)
---------- --------- -------------------
SMITH CLERK SMITHCLERK
ALLEN SALESMAN ALLENSALESMAN
WARD SALESMAN WARDSALESMAN
JONES MANAGER JONESMANAGER
MARTIN SALESMAN MARTINSALESMAN
BLAKE MANAGER BLAKEMANAGER
CLARK MANAGER CLARKMANAGER
KING PRESIDENT KINGPRESIDENT
TURNER SALESMAN TURNERSALESMAN
JAMES CLERK JAMESCLERK
FORD ANALYST FORDANALYST
MILLER CLERK MILLERCLERK
已选择12行。
length查字符串的长度
SQL> select length('张三') from dual; --按照字
LENGTH('张三')
--------------
2
SQL> select lengthb('张三') from dual; --按照字节
LENGTHB('张三')
---------------
4
SQL> select lengthc('张三') from dual; --unicode的长度
LENGTHC('张三')
---------------
2
substr字符串截取
SQL> select ename ,substr(ename,1,2) "first", substr(ename,3) "middle" ,substr(ename,-1,1) "last" from emp
--从第1位开始,截取2位;不指明n,一直到字符串结尾;负数是从后面开始;
ENAME firs middle la
---------- ---- ---------------- --
SMITH SM ITH H
ALLEN AL LEN N
WARD WA RD D
JONES JO NES S
MARTIN MA RTIN N
BLAKE BL AKE E
CLARK CL ARK K
KING KI NG G
TURNER TU RNER R
JAMES JA MES S
FORD FO RD D
MILLER MI LLER R
已选择12行。
instr字串在父串中的位置
SQL> select ename,instr(ename,'A') "A在第几位" from emp;
ENAME A在第几位
---------- ----------
SMITH 0
ALLEN 1
WARD 2
JONES 0
MARTIN 2
BLAKE 3
CLARK 3
KING 0
TURNER 0
JAMES 2
FORD_A 6
MILLER 0
已选择12行。
0表示在父串中未找到字串。
截取字符串和添加字符串的函数
trim截去两边的字符
SQL> select trim(leading 'a' from 'aaaaabcaaadeaaaaa') from dual;
TRIM(LEADING
------------
bcaaadeaaaaa
--截掉连续的前置的a
SQL> select trim(trailing 'a' from 'aaaaabcaaadeaaaaa') from dual;
TRIM(TRAILIN
------------
aaaaabcaaade
--截掉连续的后置的a
SQL> select trim(both 'a' from 'aaaaabcaaadeaaaaa') from dual;
TRIM(BO
-------
bcaaade
--截掉连续的前置和后置的a
SQL> select trim('a' from 'aaaaabcaaadeaaaaa') from dual;
TRIM('A
-------
bcaaade
--不说明前置还是后置相当于both全截断。
trim常用于去空格处理。
SQL> select trim(' ' from ' addfsdf sfsf sfs ') from dual;
TRIM(''FROM'ADDF
----------------
addfsdf sfsf sfs
lpad,rpad填充
SQL> select lpad(ename,20,'*') ename , rpad(ename,10,'-')ename from emp;
ENAME ENAME
---------------------------------------- --------------------
***************SMITH SMITH-----
***************ALLEN ALLEN-----
****************WARD WARD------
***************JONES JONES-----
**************MARTIN MARTIN----
***************BLAKE BLAKE-----
***************CLARK CLARK-----
****************KING KING------
**************TURNER TURNER----
***************JAMES JAMES-----
**************FORD_A FORD_A----
**************MILLER MILLER----
已选择12行。
lpad是左填充,20是要填充的位数,*是要填充的字符串
rpad是右填充,10是要填充的位数,-是要填充的字符串
SQL> select lpad(sal,2,' ') ename, rpad(sal,10,' ') ename,sal from emp;
位数不足 左对齐 右对齐
ENAM ENAME SAL
---- -------------------- ----------
80 800 800
16 1600 1600
12 1250 1250
29 2975 2975
12 1250 1250
28 2850 2850
24 2450 2450
50 5000 5000
15 1500 1500
95 950 950
30 3000 3000
13 1300 1300
已选择12行。
lpad左填充,rpad右填充,一般用途是美化输出结果。如果位数不足,按照截取后的结果显示,不报错。
replace替换
SQL> select replace('JACK and JUE','J','BL') from dual;
REPLACE('JACKA
--------------
BLACK and BLUE
将字符串中的'J'全部替换为'BL'