第三章:Oracle常用函数
一、Oracle字符函数
拼接字符串:
’||‘ 或者 ’concat‘拼接,concat只能写两个字符串,但是他可以嵌套,在嵌套;
-- '||' 拼接;可以写列名,也可以写固定字符串
select 'a' || 'b' from dual;
-- concat 拼接 只能写两个字符串;可以拼接在拼接;
select concat('a','b') from dual;
首字母大写
initcap 首字母大写,字母转大写 upper,字母转小写lower
-- 首字母大写
select initcap('my name is AAA') from dual;
-- 字母转小写
select lower("my name is AAA") from dual;
-- 字母转大写
select upper("my name is AAA") from dual;
截取字符串
截取字符串substr:substr(’截取原来的字符串‘,‘从第一位开始截取,第一个是1’,【截取长度,如果不写截取
到尾部】);
-- 截取字符串
select substr('你好,世界,哈哈',3,3) from dual;
replace 替换字符串: replace(‘替换的原来的字符串’,‘需要替换的字符串’,‘替换后的字符串,如果不写会将替换的字符串删除’)
-- 替换字符串
select replace('my name is sun','sun','guo') -- 如果替换后的字符串('guo')不写,那么原来的字符串'sun'将被删掉
去除左侧固定字符串ltrim:ltrim(‘原来的字符串’,‘删除掉的字符串’)如果删除掉的字符串不写,那么默认删除左边的空格
去除右侧固定字符串rtrim:rtrim(‘原来的字符串’,‘删除掉的字符串’)如果删除掉的字符串不写,那么默认删除右边边的空格
-- 删除左边空格
select ltrim(' AAA ') from dual;
-- 删除左边的字符
select ltrim('**** AAAA ') from dual;
-- 右边方法同上
去除左右两侧的空格trim:trim(‘字符串’)去除左右两边的空格;去除左侧’leading’,去除右侧trailing
-- 去除左右两边的空格;只能 去除左右两边的空格,不能去除中间的空格
select trim(' AAA ') from dual;
-- trim去除左侧字符串 'leading'
select trim (leading '*' from '*****AAAA*****') from dual;
-- trim 去除右侧字符串 'trailing'
select trim (trailing '*' from '*****AAAA*****') from dual;
去除左右两边的字符串trim:trim(both ‘…’ from ‘… AAA …’) from dual; ltrim 和 rtrim 写到一起是和trim的效果一样;
-- 去除左右两边的字符串
select trim(both '*' from '*** aaa ***' ) from dual;
-- ltrim 和 rtrim 组合去掉左右两边的字符串;
select ltrim(rtrim('****AAAA****'),'*','*')from dual;
补全字符串lpad:lpad(‘需要补全的原来的字符串’,‘补到几位’,补什么)
-- 补全字符串 lpad('需要补全的原来的字符串','补到几位',补什么)
select lpad ('123',5,'1') from dual;
二、Oracle数学函数
-- ceil 向上取整
select ceil(4.1) from dual;
-- floor 向下取整
select floor(4.6) from dual;
-- trunc 按照一定的精度取数字
Select trunc(3.1415926,4) from dual;
三、Oracle日期函数
-- sysdate 获取系统当前日期
Select sysdate from dual;
-- 获取本月最后一天
select last_Day(sysdate) from dual;
-- 获取今年还有几天,还有几个月
-- to_Date(日期)字符串转换日期
select to_date('2020-2-23','yyyy-MM-dd') - sysdate from dual;
-- 获取月份之差
select months_between(to_date('2020-10-23','yyyy-MM-dd'),sysdate) from dual;
-- trunc 截取日期;直接写日期,代表保留年月日
Select trunc(sysdate) from dual;
-- trunc 获取当前的年份或者月份或者日;
select trunc(sysdate,'年or月or日') from dual;
-- add_months(sysdate,2) 进行月份的加减;
select add_months(sysdate,2) from dual;
四、Oracle转换函数
rowid(是一个伪列) ,oracle 修改结果集;
-- rowid oracle 修改结果集函数
select t.*,t.rowid from dept t;
select * from dept for update;
to_char:将日期或者数据装换为char类型
-- 将数字转换成固定格式的字符串
select to_Char(123456,'999,999,99,') from dual;
-- 将日期转换成固定格式的字符串;可以随意转换;时:hh24;分mi;秒ss
select to_char(sysdate,'yyyy') from dual;
2019-01-01 to_date
select to_Date('2019-01-01 15','yyyy-mm-dd hh24') from dual;
to_number将字符串转换成数字,统计,对非数字进行转换;
-- to_number 将字符串转换成数字
select to_number('123456') from dual;
五、Oracle聚合函数
max -- 最大值
min -- 最小值
sum -- 求和
avg -- 平均数
count -- 计算
六、Oracle其他函数
-- sys_guid 生成32位随机数,自动生成主键
Select sys_guid() from dual;
-- nullif 判断值是否相等,如果相等返回null,不相等输出第一个值
select nullif(sal,3000) from dual;
-- 条件取值 decode(列名,'值1','输出1',值2,输出2,,,,其他值)
select decode(deptno,20,'河南分部',30,'河北分部','不知道') from emp;
-- 判断值为空不为空 nvl (值1,值2) 若值1为null,返回值2,值1不为null返回值2;
select nvl(null,123) from dual; -- 输出null