oracle12c 10.22知识点整理(数学函数以及字符串函数重点总结)
函数
重要的函数概览图
一、数学函数的使用
trunc
1)select trunc(sal) from test;
//不带参数则默认保留整数位,小数位舍弃;
执行结果为:
2)select trunc(sal,3) from test;
//带正整数参数n则截取n位小数,其余位舍弃;
执行结果为:
3)select trunc(sal,-2) from test;
//带负整数n则截取n位整数,其余位舍弃;
执行结果为:
ceil
用法:对n向上取整
测试:
FLOOR(n)
用法:对n向下取整
测试:
round(n,[m]) 该函数功能为四舍五入。
若省掉m,则四舍五入到整数;
若m为正数,则四舍五入到小数点的m位后;
若m为负数,则四舍五入到小数点的m位前;
测试:
m为负数,则四舍五入到小数点的m位前;
mod(m,n)取余函数(取模)
abs(n)返回数字n的绝对值
DBMS_RANDOM.RANDOM /DBMS_RANDOM.VALUE(X,Y)//随机获取一个数
二、字符串处理函数的使用
1、substr
格式一、substr(string1,a,b)
从string1的a位置截取长度为b的字符串
例:
select substr(‘helloworld’,2,4) from dual; //ello
select substr(‘helloworld’,10,4) from dual; //d
select substr(‘helloworld’,12,4) from dual; //null
格式二、substr(string1,a)
从string1的第a个字符开始截取后面所有字母
例:
select substr(‘helloworld’,2) from dual; //elloworld
select substr(‘helloworld’,-2) from dual; //ld(可以用此方法获取字符串最后几位)
2、length、lengthb函数
length(string1):返回字符串所占字符长度,单位是字符
lengthb(string1):返回字符串所占字节长度,单位是字节
例:
select length(‘你好’) from dual; // 2
select lengthb(‘你好’) from dual; // 4
3、instr()函数
格式一:instr(string1,string2) 返回string2第一次出现在string1的位置,若没有出现,则显示0
例:
select instr(‘hello’,‘lc’) from dual; // 0
select instr(‘hello’,‘lo’) from dual; // 4
格式二:instr(string1,string2,start_position,nth_potision)
返回string1从start_position位置开始检索,找到第n次出现string2的位置
例:
select instr(‘hello’,‘l’,1,2) from dual; // 4
select instr(‘hello’,‘l’,4,1) from dual; // 4
4、CONCAT
concat(string1,string2) 把string1和string2拼接起来
例:
select concat(‘hello’,‘world’) from dual; //helloworld
5、字符大小写转换函数
6、replace函数
作用:
将字符串中的E1子串用E2替换。如果省略E2,则从原串中删除掉子串E1
用法:REPLACE(column | expression , E1 [, E2])
7、LPAD、RPAD
lpad(string1,length,[pad_string]) 左填充
rpad(string1,length,[pad_string]) 右填充
作用:
string1待填充字符串
length字符长度,如果n大于string1,则填充至n,如果小于string1,则从左往右截取string1长度为length的字符串
pad_string填充字符,缺省值为空格
例:
select lpad(‘hello’,10) from dual; //’ hello’
select lpad(‘hello’,10,0) from dual; //00000hello
select lpad(‘hello’,3) from dual; //hel
select lpad(‘hello’,10) from dual; //'hello ’
select lpad(‘hello’,10,0) from dual; //hello00000
select lpad(‘hello’,3) from dual; //hel
8、TRIM,LTRIM,RTRIM
1)去除空格
trim去除两端空格,不去除字符串中间空格
ltrim去除左端空格,不去除中间
rtrim去除右端空格,不去除中间
例:
select trim(’ aa bb cc ‘)from dual; //‘aa bb cc’
select ltrim(’ aa bb cc ')from dual; //‘aa bb cc ’
select rtrim(’ aa bb cc ‘)from dual; //’ aa bb cc
2)去除指定符号
trim( leading|trailing|both string1 from string2)
从前面,后面,前后面去除string2中的string1,缺省值为both
例:
select trim(leading ‘a’ from ‘abccba’)from dual; //bccba
select trim(trailing ‘a’ from ‘abccba’)from dual; //abccb
select trim(both ‘a’ from ‘abccba’)from dual; //bccb
select trim(‘a’ from ‘abccba’) from dual; //bccb
select trim(‘ab’ from ‘abccba’) from dual; //报错
3)ltrim(stng1,string2)
从string1中移除string2的字符
移除规则是从string1从左到右,当该字符出现在string2的字符集中,移除该字符,直到出现不存在string2中的字符或string1为空,移除结束
4)rtrim与ltrim类似,规则改为从右往左
注意:trim只能去除单个字符,而ltrim和rtrim可以去除多个字符。
函数练习:
–1. 求字符串“student”的长度
select length(‘student’) from dual;
–2. 连接“MY”和“book”两个字符串
select concat(‘MY’,‘book’) from dual;
–3. 以大写方式显示“hello”字符串
select upper(‘hello’) from dual;
–4. 将emp表中所有雇员的姓名以首字母大写的形式显示
select initcap(ename) from emp;
–5. 在字符串“my book”的左侧填充字符串“th”,使整个字符串的长度为10
select concat(‘th ‘,‘my book’) from dual;
select lpad(‘my book’,10,‘th’) from dual;s
–6. 将字符串“abcd”按序翻译成“1234”,以此翻译字符串“jack”
select translate(‘jack’,‘abcd’,‘1234’) from dual;
–7. 分别求得字符“Z”、“H”、“D”和空格的ASCII值。
select ascii(‘Z’) from dual;
–8. 将7题中求得的ASCII值,返回成其对应的字符
select chr(90) from dual;
–9. 在字符串“oracle 12c”中,从第3个字符开始查询字符串“c”第2次出现的位置
select instr(‘oracle 12c’,‘c’,3,2) from dual;
–10. 在HR模式下,在employees表中检索雇员名称以字母“a”开头的员工信息,并将first_name字段的值转换成小写,将last_name字段的值转换为大写。
–11. 使用函数分别去掉字符串“####East####”左侧的“#”,“East ”右侧的空格,和“####East####”左右两侧的“#”
select ltrim(’####East####’,’#’),rtrim(‘East ‘),trim(’#‘from’####East####’)from dual;
–12. 把字符串“Bad Luck Bad Gril”中的“Bad”字符串用“Good”替换
select replace(‘Bad Luck Bad Gril’,‘Bad’,‘Good’) from dual;
–13. 在字符串“MessageBox”中从第8个位置截取长度为3的子字符串。
select substr(‘MessageBox’,8,3) from dual;