Oracle --- 单行函数分组函数

Posted 劳埃德·福杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle --- 单行函数分组函数相关的知识,希望对你有一定的参考价值。

1.大小写转换函数

LOWER()、UPPER()、INITCAP()(单词首字母大写转换)

select empno, ename, deptno
FROM emp
WHERE ename = UPPER('allen');

2.字符操作函数

CONCAT('Good', 'String') --- GoodString
SUBSTR('String',1,3) --- Str
LENGTH('String') --- 6
INSTR('String', 'r') --- 3(查找字符位置)
LPAD(sal,10,'*') --- ******5000(左边填充)
TRIM('S' FROM 'SSMITH') --- MITH(修剪)

3.数字函数

ROUND():对指定的值进行四舍五入
TRUNC():对指定的值进行截取
MOD():返回触发计算后的余数

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)
FROM DUAL;

// 效果
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- --------------- ----------------
          45.92              46               50
SELECT TRUNC(45.923,2), TRUNC(45.923,0), TRUNC(45.923,-1)
FROM DUAL;

// 效果
TRUNC(45.923,2) TRUNC(45.923,0) TRUNC(45.923,-1)
--------------- --------------- ----------------
          45.92              45               40
SELECT ename, sal, comm, MOD(sal, comm)
FROM emp
WHERE job = 'SALESMAN';

4.日期函数

SYSDATE函数返回当前日期

SELECT ename, (SYSDATE-hiredate)/7 WEEKS
FROM emp
WHERE deptno = 10;

MONTHS_BETWEEN:两个日期之间的月数
ADD_MONTHS:为一个日期增加月份
NEXT_DAY:一个日期的下一个指定日子(例如 : 星期1 ) 的日期
LAST_DAY:某个月份的最后一天
ROUND:对日期进行四舍五入计算
TRUNC:对日期进行取整计算

5.类型转换函数

隐式

SELECT 5+'2' FROM dual;
SELECT sysdate+'2' FROM dual;
SELECT ename||2016 FROM emp;

TO_CHAR(date, 'fmt')日期转字符串

SELECT ename, TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE
FROM emp;

TO_CHAR(number, 'fmt')数字转字符串

// 9表示一个数字值
SELECT TO_CHAR(sal,'$99,999') SALARY
FROM emp
WHERE ename = 'MILLER';

TO_NUMBER 将一个字符串转化为数字
TO_DATE 将一个字符串转化为日期

6.NULL值

如果数学表达式中包含了一个空值 , 那么计算的结果为空值
在升序排序时,NULL值排在最后,在降序排序时,NULL值排在最前
NULLS FIRST :指定空值显示在查询结果的开始处
NULLS LAST :指定空值显示在查询结果的结尾处

IS NULL 操作符:检查有无空值

SELECT ename, mgr
FROM emp
WHERE mgr IS NULL;

AND操作符、OR 操作符、NOT操作符(优先级:NOT>AND>OR) ,用 圆括号 可以改变操作符的优先级次序

SELECT ename, job, sal
FROM emp
WHERE job='SALESMAN' OR job='PRESIDENT' AND sal>1500;

7.NVL 函数 、NVL2 函数 和 NULLIF 函数

NVL( expr1 , expr2 )
如果 expr1 为 null , 则返回 expr2, 否则返回 expr1
可以使用的数据类型是数字 、 日期 、 字符型,数据类型必须能够匹配
  NVL(comm,0)
  NVL(hiredate,'01-JAN-11')
  NVL(job,'No Job Yet')

SELECT ename, sal, comm, (sal*12)+NVL(comm,0)
FROM emp;

 NVL2 (expr1, expr2, expr3)
如果表达式1不为空值NULL,返回值为表达式2的值,如果表达式1为空值NULL,返回值为表达式3的值
表达式2和3是除 LONG 以外的任何数据类型,表达式1可以是任何数据类型

NULLIF (expr1, expr2)  
如果两个表达式相等就返回空值 NULL,否则就返回表达式 1

8.DECODE 函数 、CASE 表达式、COALESCE 函数

DECODE 函数 、CASE 表达式:具有与 CASE 表达式或 IF-THEN-ELSE 语句相同的功效 

SELECT job, sal,DECODE(job, 'ANALYST', SAL*1.1,
                            'CLERK', SAL*1.15,
                            'MANAGER', SAL*1.20, SAL) REVISED_SALARY
FROM emp;
SELECT CASE JOB WHEN 'CLERK' THEN 'CLERK'
                WHEN 'SALESMAN' THEN 'SALESMAN'
                ELSE 'OTHERS'
       END
FROM EMP;

COALESCE( 表达式 1, 表达式 2, 表达式 3, …, 表达式 n) 
如果第一个表达式不为空,则COALESCE函数返回该表达式 ;否则,它将对其余的表达式执行COALESCE运算

9.分组函数

AVG、COUNT、MAX、MIN、SUM

SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal)
FROM emp
WHERE job LIKE 'SALES%';
// 返回查询出的总行数
SELECT COUNT(*)
FROM emp
WHERE deptno = 30;

// 返回expr值非空的行数
SELECT COUNT(comm)
FROM emp
WHERE deptno = 30;

分组函数会忽略数据行中的全部空值,不想忽略可以和 NVL 函数结合

SELECT AVG(NVL(comm,0))
FROM emp;

创建分组数据GROUP BY
GROUP BY后面的列可以不在SELECT列表中

SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;

SELECT deptno, job, sum(sal)
ROM emp
GROUP BY deptno, job;

用HAVING子句排除分组结果

SELECT deptno, max(sal)
FROM emp
GROUP BY deptno
HAVING max(sal)>2900;

分组函数也可以嵌套使用

以上是关于Oracle --- 单行函数分组函数的主要内容,如果未能解决你的问题,请参考以下文章

oracle函数

Oracle系列:单行函数

Oracle入门第二天(下)——单行函数

Mysql单行函数

单行函数+分组函数总结(MySQL)

MySQL笔记--- 部分 DQL 语句;条件查询;排序;分组函数;单行处理函数;group by ,having ;