SQL单行函数和多行函数
单行函数和多行函数示意图:

单行函数分为五种类型:字符函数、数值函数、日期函数、转换函数、通用函数

单行函数:
- --大小写控制函数
- select lower('Hello World') 转小写, upper('Hello World') 转大写 from dual;
- --initcap: 首字母大写
- select initcap('hello world') 首字符大写 from dual;
- --字符控制函数
- -- concat: 字符连接函数, 等同于 ||
- select concat('Hello',' World') from dual;
- --substr:求母串中的某个子串
- select substr('Hello World',3) from dual;
- select substr('Hello World',3,4) from dual;
- --length和lengthb: 字符数和字节数
- select length('China') 字符数, lengthb('China') 字节数 from dual;
- --instr:在母串中,查找子串的位置
- select instr('Hello World','ll') from dual;
- --lpad,rpad: 左右填充,将abcd用*填充到10位
- select lpad('abcd',10,'*') 左填充, rpad('abcd',10,'*') 右填充 from dual;
- --trim: 去掉字符串前后指定的字符
- select trim('H' from 'Hello WorldH') from dual;
- --replace:字符串替换函数
- select replace('Hello Wordl','l','*') from dual;
- --数字函数
- select round(45.926,2) 四舍五入, trunc(45.926,2) 截断 ,mod(1600,300) 求于 from dual;
- --ROUND函数
- select round(45.923,0) 整数位, round(45.923,-1) 十位,round(45.923,-2) 百位 from dual;
- --日期函数
- --显示当前日期
- select sysdate from dual;
- --显示时间部分
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
- --显示昨天,今天和明天,加减数字仍未日期
- select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
- --两个日期相减,结果为相差的天数,查询员工信息,显示员工工龄。两个日期不能相加
- select empno,ename, sysdate-hiredate 天 from emp;
- --查询员工信息,显示员工工龄,分别按照天,星期,月显示
- select empno,ename,sysdate-hiredate 天,(sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月 from emp;
- --months_between:两个日期相差的月数
- select (sysdate-hiredate)/30 方式一, months_between(sysdate,hiredate) 方式二 from emp;
- --add_months:在指定日期上加上若干个月
- select add_months(sysdate,1) 下个月, add_months(sysdate,123) "123个月后" from dual
- --last_day: 某个日期当月的最后一天
- select last_day(sysdate) from dual;
- --next_day:下周六
- select next_day(sysdate,'星期五') from dual;
- --对日期进行四舍五入
- select round(sysdate,'MONTH') 月,round(sysdate,'YEAR') from dual;
- --对日期进行截断
- select trunc(sysdate,'MONTH') 月,trunc(sysdate,'YEAR') from dual;
- --日期格式
- select * from emp where hiredate=to_date('1982-01-23','yyyy-mm-dd');
- -- 查询当前日期:显示: 2011-09-17 15:12:15今天是星期六
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
- --查询员工信息,显示员工的编号,姓名,月薪,要求有货币代码(L),千位符(,),小数点(.),
- select empno,ename,to_char(sal,'L9,999.99') from emp;
- --通用函数
- --nvl(exp1,exp2):当exp1为空时,返回exp2
- --nvl2(exp1,exp2,exp3):当exp1为空时,返回exp3;否则返回exp2
- select ename,sal*12+nvl2(comm,comm,0) 年收入 from emp;
- --NULLIF (expr1, expr2),如果expr1=expr2,返回null;否则,返回expr1
- select nullif('abc','abc') from dual;
- select nullif('abc','abcaa') from dual;
- --COALESCE :找到参数列表中,第一个不为空的值
- select ename,comm,sal,COALESCE(comm,sal) from emp;
- --给员工涨工资,根据职位涨,总裁涨1000,经理涨600 其他人员涨400
- select ename,job,sal 涨前工资, case job when 'PRESIDENT' then sal+1000
- when 'MANAGER' then sal+600
- else sal+400
- end 涨后工资
- from emp;
- select ename,job,sal 涨前工资, decode(job,'PRESIDENT',sal+1000,
- 'MANAGER',sal+600,
- sal+400) 涨后工资
- from emp;
(五).转换函数(Conversion Functions) 转换函数将指定字符从一种类型转换为另一种,通常这类函数遵循如下惯例:函数名称后面跟着待转换类型以及输出类型。
1、TO_CHAR() 本函数又可以分三小类,分别是 转换字符->字符TO_CHAR(c):将nchar,nvarchar2,clob,nclob类型转换为char类型; 例如:SELECT TO_CHAR('AABBCC') FROM DUAL;
转换时间->字符TO_CHAR(d[,fmt]):将指定的时间(data,timestamp,timestamp with time zone)按照指定格式转换为varchar2类型; 例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
转换数值->字符TO_CHAR(n[,fmt]):将指定数值n按照指定格式fmt转换为varchar2类型并返回; 例如:SELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL;
2、TO_DATE(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2转换为日期类型,如果fmt参数不为空,则按照fmt中指定格式进行转换。注意这里的fmt参数。如果ftm为'J'则表示按照公元制(Julian day)转换,c则必须为大于0并小于5373484的正整数。 例如: SELECT TO_DATE(2454336, 'J') FROM DUAL; SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
为什么公元制的话,c的值必须不大于5373484呢?因为Oracle的DATE类型的取值范围是公元前4712年1月1日至公元9999年12月31日。看看下面这个语句: SELECT TO_CHAR(TO_DATE('9999-12-31','yyyy-mm-dd'),'j') FROM DUAL;
3、TO_NUMBER(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。 例如:SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL;
(六).其它辅助函数(Miscellaneous Single-Row Functions)
1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。 exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。 毫无疑问,decode是个非常重要的函数,在实现行转列等功能时都会用到,需要牢记和熟练使用。
例如:select decode('a2','a1','true1','a2','true2','default') from dual;
2、GREATEST(n1,n2,...n) 返回序列中的最大值 例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;
3、LEAST(n1,n2....n) 返回序列中的最小值 例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL;
4、NULLIF(c1,c2) Nullif也是个很有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END 例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;
5、NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。 例如:SELECT NVL(null, '12') FROM DUAL;
6、NVL2(c1,c2,c3) 大家可能都用到nvl,但你用过nvl2吗?如果c1非空则返回c2,如果c1为空则返回c3 例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;
7、SYS_CONNECT_BY_PATH(col,c) 该函数只能应用于树状查询。返回通过c1连接的从根到节点的路径。该函数必须与connect by 子句共同使用。
多行函数
和单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数能在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。多行函数分为接收多个输入,返回一个输出。
组函数:
- --求员工的工资总和
- select sum(sal) from emp;
- --求个数
- select count(*) from emp;
- --求平均工资
- select sum(sal)/count(*) 方式一, avg(sal) 方式二 from emp;
- --关于空值:组函数会自动滤空
- select count(*), count(comm) from emp;
- --max和min:求最高工资和最低工资
- select max(sal) 最高工资,min(sal) 最低工资 from emp;
- --分组数据:求各个部门的平均工资
- select deptno,avg(sal) from emp group by deptno;
- --group by作用于多列: 按部门,不同的工种,统计平均工资
- --group by作用于多列:先按照第一列分组;如果相同,再按照第二列分组
- select deptno,job,avg(sal) from emp group by deptno,job;
- --:求部门的平均工资大于2000的部门
- select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
- --group by的增强
- select deptno,job,sum(sal) from emp group by rollup(deptno,job);
- --不同的deptno空两行/取消设置
- break on deptno skip 2/break on null
SQL单行函数和多行函数的更多相关文章
- Oracle-DQL 5- 分组函数(多行函数)
分组函数(多行函数):--针对表中的多行数据进行运算,返回一个结果 1.多行函数 --sum() 求和SELECT SUM(sal) FROM emp; --avg() 求平均值SELECT AVG( ...
- oracle--单行函数和多行函数
单行函数 1.字符函数 函 数 功 能 示 例 结 果 INITCAP (char) 首字母大写 initcap ('hello') Hello LOWER (char) 转换为小写 lower ...
- Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...
- 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)
1 多行函数(理解:有多个输入,但仅仅输出1个结果) SQL>select count(*) from emp; COUNT(*) ------------- 14 B 字符函数Lowe ...
- DQL---条件查询、单行函数、多行函数、分组函数、数据类型
一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...
- Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项
目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...
- Oracle常用sql语句(二)之组函数、多表查询
DML(数据操纵语言) INSERT .UPDATE. DELETE 插入操作:INSERT: 语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...); 注 ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- ORACLE SQL单行函数(二)【weber出品必属精品】
11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...
随机推荐
- 使用json遇到的问题
JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立 ...
- hibernate 标签inverse cascade
inverse设立不当会导致性能低下,其实是说inverse设立不当,会产生多余重复的SQL语句甚至致使JDBC exception的throw.这是我们在建立实体类关系时必须需要关注的地方.一般来说 ...
- 【BZOJ4724】[POI2017]Podzielno 数学+二分
[BZOJ4724][POI2017]Podzielno Description B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零, ...
- 利用Google Analytics API实现自己的统计报表
Google Analytics 简称 GA,功能实在是太强大了,正因如此,导致调研GA API花费了大量的时间,太多的名词需要梳理. 正确的学习步骤是: 首先,找个有权限的账号,登录GA(https ...
- 巨蟒python全栈开发django9:一些知识点的汇总
回顾上周内容: 题目: 1.人民出版社出版过的所有书籍的名字以及作者的姓名(三种写法,笔记中有两种写法) 2.手机以2开头的作者出版过的所有书籍名称以及出版社名称(三种写法,笔记中有1种写法) 1.聚 ...
- POJ 3026 Borg Maze【BFS+最小生成树】
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- HashMap 扩容机制
引用于: http://www.cnblogs.com/hongdada/p/6024832.html HashMap: public HashMap(int initialCapacity, flo ...
- 常用代码块:java使用系统浏览器打开url
方法一:用于windows try { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url) ...
- Python3.6全栈开发实例[024]
24.文件a1.txt内容(注意每行中的空格是不一样的,需要对空格进行处理)序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linu ...
- Android系统移植与调试之------->Amlogic方案编译步骤
1. 拷贝Amlogic的SourceCode 切换目录到 /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到 / ...