Oracle中的内置函数
Oracle中的内置函数非常多,这里只介绍比较常用的。
1,字符型函数
LOWER/UPPER – 大小写转换
select upper('this is a lower string.') from dual;
CONCAT – 连接两个字符串
select concat('abc','def') from dual;
SUBSTR – 从字符串中截取子字符串
select substr('abcdef',0,4) from dual; --0表示从第一位开始截取,4表示截取4个字符。省略4表示截取到字符串末尾。
LENGTH – 返回字符串长度
select 'abcdef' from dual; -- 返回6
TRIM – 去掉字符串前后的空格
select trim(' dhc ') from dual; -- 返回‘dhc’
REPLACE – 替换部分字符串
replace(string, search string, replace string)
select replace(‘This is a Oracle DB.’,‘Oracle’,‘SQL Server’); – 返回’This is a SQL Server DB.’ 注意这里的search string是要区分大小写的。
2,数字型函数
ROUND
round(3.16,1) -- 四舍五入3.14到1位小数位,返回3.2
TRUNC
trunc(3.14,1) -- 裁断3.14到1位小数位,返回3.1
MOD
mod(3,6) -- 返回3除以6的余数
3,日期函数
Oracle在内部用数字格式存储日期。默认显示是只有日期没有时间的,例如“2020-10-09”,但很容易更改:
alter session set nls_date_format='yyyy-mm-dd hh24:mm:dd'
a, date类型加减整数,相当于加减天数。
b, 两个date相加减,结果是两个date之间的天数差异(整数)。
c, 用小时数除以24,可以加减小时到date。
EXTRACT
select extract(year/month/day from sysdate) from dual; -- 注意只能用于返回年月日的正整数,不能返回星期,小时,分,秒。这里返回2020。
TO_CHAR
用to_char函数可以方便地取出date中的所有部分,包括世纪和星期这样extract函数做不到的部分。而且形式灵活,及其方便。
select to_char(sysdate,'HH24') from dual; -- 返回小时,以24小时方式显示
select to_char(sysdate,'ww') from dual; -- 返回星期
select to_char(sysdate,'mi') from dual; -- 返回分钟
select to_char(sysdate,'yyyy/mm') from dual; -- 还可以返回这样的组合,非常方便
ROUND&TRUNC
round和trunc除可以用于数字外,还可以用于日期,且返回值依然是日期类型。
select round(sysdate, 'year') from dual; -- 现在是2020年10月9日,四舍五入后返回2021年1月1日。
select trunc(sysdate, 'year') from dual; -- 现在是2020年10月9日,截断后返回2021年1月1日。
注意这两个函数的参数可以是year/month/day/hh24/mi,没有week。且参数为day时,实际返回的是所在week的第一天。
4,其他函数
NVL
nvl(exp1,exp2) – 如果exp1为空,则返回exp2.
DECODE
decode是类似于if-then-else逻辑的函数。
decode(job,'职工',salary*1.5) -- 如果job为‘职工’,则工资涨薪50%。
RANK&DENSE_RANK
Rank既是汇总函数,也可以是分析函数,二者语法不同。这里按汇总函数来使用。例如显示工资1500在公司所有雇员中的排名是多少。注意rank的参数只能是常量,不能是变量。
select rank(1500) within group (order by sal desc)
from emp
--注意即使没有人工资是1500,rank依然会返回1500在所有人工资中的排名。
dense_rank和rank的区别是,如果并列排名的情况,如何处理。
select dense_rank(1500) within group (order by sal desc)
from emp
--如果部门工资倒序是:2000,1800,1800,1500。那么工资是1500的员工,排名应该是第4名还是第3名呢?此时rank(1500)返回第4名,而dense_rank()则返回第3名。
本文地址:https://blog.csdn.net/OnlyQi/article/details/108981906