Oracle的强大之处之一,就在于有较多的函数方便进行数据分析操作,Oracle中函数分成了两个大类,一类是单行函数,另一类是多行函数,而每一类函数下面又分为了较为多类型的函数。
单行函数
(注释:输入一个参数,输出一个结果)
字符串函数:
对字符串操作
演示实列 | 操作结果 |
---|---|
CONCAT(‘Hello’, ‘World’) | HelloWorld |
SUBSTR(‘HelloWorld’,1,5) | Hello |
LENGTH(‘HelloWorld’) | 10 |
INSTR(‘HelloWorld’, ‘W’) | 6 |
LPAD(10000,10,’*’) | *****24000 |
RPAD(10000, 10, ‘*’) | 24000***** |
TRIM(‘a’ FROM ‘aHelloWorld’); 去除首个字符 | elloWorld |
TRIM(’ HelloWorld’) | HelloWorld |
TRIM(‘Hello World’) | Hello World |
数字函数:
对数字进行计算,返回一个数字
演示实列 | 操作结果 |
---|---|
round(2.666) – round () 四舍五入 | 3 |
trunc(2.666,1); – trunc() 截取小数点后位置 | 2.6 |
mod(3,10); – mod() 模运算符(求余) | 3 |
日期函数:
对日期和时间进行处理
演示实列 | 操作结果 |
---|---|
MONTHS_BETWEEN(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),TO_DATE(‘2021-04-10’,‘yyyy-mm-dd’)) | 1.16129032 |
ADD_MONTHS(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),2) | 2021/7/15 |
NEXT_DAY(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),‘FRIDAY’) | 2021/5/21 |
NEXT_DAY(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),1) | 2021/5/16 |
LAST_DAY(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’)) | 2021/5/31 |
ROUND(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),‘MONTH’) | 2021/5/1 |
ROUND(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),‘YEAR’) | 2021/1/1 |
TRUNC(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’), ‘MONTH’) | 2021/5/1 |
TRUNC(TO_DATE(‘2021-05-15’,‘yyyy-mm-dd’),‘YEAR’) | 2021/1/1 |
转换函数:
可以将一种数据类型转换为另外一种数据类型
- 大小写,首字母转换
演示实列 | 操作结果 |
---|---|
LOWER(‘SQL Course’) | sql course |
UPPER(‘SQL Course’) | SQL COURSE |
INITCAP(‘SQL course’) | Sql Course |
- TO_CHAR(date, ‘format_model’) ;函数:日期到字符串的转换,format_model的可选参数如下
日期格式化****元素 | 意义 |
---|---|
YYYY | 4位数字表示的年份 |
YEAR | 英文描述的年份 |
MM | 2位数字表示的月份 |
MONTH | 英文描述的月份 |
MON | 三个字母的英文描述月份简称 |
DD | 2位数字表示的日期 |
DAY | 英文描述的星期几 |
DY | 三个字母的英文描述的星期几简称 |
HH24:MI:SS AM | 时分秒的格式化 |
DDspth | 英文描述的月中第几天 |
fm | 格式化关键字,可选 |
例句:
SELECT last_name, TO_CHAR(hire_date, 'fmDD "of" Month YYYY') AS HIREDATE
FROM employees;
- TO_CHAR(number, ‘format_model’) ; 函数:数字到字符串的转换
- TO_NUMBER();函数:字符串到数字的转换
- TO_DATE(char[, ‘format_model’]);函数:字符串到日期的转换
数字格式化****元素 | 意义 |
---|---|
9 | 表示一个数字 |
0 | 强制显示0 |
$ | 放一个美元占位符 |
L | 使用浮点本地币种符号 |
. | 显示一个小数点占位符 |
, | 显示一个千分位占位符 |
例句:
SELECT TO_CHAR(salary, 'L99,999.00') SALARY FROM employees
WHERE last_name = 'Ernst';
例句:
select TO_NUMBER('4456') from dual;
select TO_NUMBER('$4,456','$9,999' )from dual;
select TO_NUMBER('$4,456,455.000','$9,999,999,999,999.999' )from dual;
例句:
select to_date ('22-FEB-11') from dual;
select to_date('2011-2-22','YYYY-MM-DD') from dual;
select to_date('2-22-2011','MM-DD-YYYY') from dual;
select to_date('2011-FEB-22','YYYY-MON-DD') from dual;
其他函数
演示实例 | 操作结果 |
---|---|
NVL (expr1, expr2) | 如果expr1为空,这返回expr2 |
NVL2 (expr1, expr2, expr3) | 如果expr1为空,这返回expr3(第2个结果)否则返回expr2 |
NULLIF (expr1, expr2) | 如果expr1和expr2相等,则返回空 |
COALESCE (expr1, expr2, …, exprn) | 如果expr1不为空,则返回expr1,结束;否则计算expr2,直到找到 一个不为NULL的值 或者如果全部为NULL,也只能返回NULL 了 |
例子:
SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees;
多行函数
(输入多个参数,或者是内部扫描多次,输出一个结果)
数量 count
count(0),--用来查询表中有多少条记录
count(字段名),--查询指定字段的数量
count(distinct 字段名),--可以先去除重在计算某个字段的值。
总和 sum
sum(sal) --获取某个字段的总和
平均值 avg
avg(字段) --获取某个字段的平均值
最大最小值 max/min
max(字段) --查询最大值
min(字段) --查询最小值