函数
单行函数
大小写函数
LOWER 转小写
UPPER 转大写
INITCAP 首字母大写
字符函数
CONCAT
用来连接两个字符串,只能有两个参数(不是两个参数会报错)
Oracle一般使用连接符 “||”来连接字符串,连接符不限字符串的个数
想要使用concat函数连接多个字符串,只能嵌套使用
并且只有两个参数都为null时才返回null
SUBSTR
截取字符串,两种用法
substr(a,b) 从a中, 第b位开始截取,直到最后
substr(a,b,c) 从a中,第b位开始,截取c位
oracle中下标都是从1开始,如果指定为0也是从1开始计算
LENGTH 字符长度
LENGTHB 字节长度
INSTR(a,b) 在a中,查找b,返回b第一次出现的位置
左填充
LPAD(原字符串,填充后的位数,填充符号)
右填充
RPAD(原字符串,填充后的位数,填充符号)
ASCII 将字符按ASCII码转换为数字
CHR 将数字按ASCII码转换为字符
LTRIM 去掉左边空格
RTRIM 去掉右边空格
TRIM
REPLACE 替换指定的字符或字符串
数字函数
ROUND 四舍五入
TRUNC 截取
MOD 取余
日期函数
查询时间
select sysdate from dual;
运行结果:
SYSDATE
------------
08-7月 -19
按指定格式显示时间
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
运行结果:
TO_CHAR(SYSDATE,'YY ------------------- 2019-07-08 10:35:20
对日期进行数学运算
在日期上加减
select sysdate+365 from dual;
运行结果:
SYSDATE+365 -------------- 07-7月 -20
两个日期相减返回相差天数
select empno "员工号",ename "姓名",sysdate-hiredate "入职天数" from emp;
运行结果:
员工号 姓名 入职天数
---------- ---------- ----------
7369 SMITH 14082.458
7499 ALLEN 14017.458
7521 WARD 14015.458
7566 JONES 13976.458
7654 MARTIN 13797.458
7698 BLAKE 13947.458
7782 CLARK 13908.458
7788 SCOTT 11768.458
7839 KING 13747.458
7844 TURNER 13817.458
7876 ADAMS 11734.458
7900 JAMES 13731.458
7902 FORD 13731.458
7934 MILLER 13680.458
两个日期相差月数 months_between
select empno "员工号",ename "姓名",months_between(sysdate,hiredate) "入职月数" from emp;
运行结果:
员工号 姓名 入职月数
---------- ---------- ----------
7369 SMITH 462.724512
7499 ALLEN 460.627738
7521 WARD 460.563222
7566 JONES 459.208383
7654 MARTIN 453.369673
7698 BLAKE 458.240641
7782 CLARK 456.982577
7788 SCOTT 386.659996
7839 KING 451.724512
7844 TURNER 454
7876 ADAMS 385.530964
7900 JAMES 451.176125
7902 FORD 451.176125
7934 MILLER 449.530964
指定日期,几个月后的日期 add_months
select add_months(sysdate,5) from dual;
运行结果:
ADD_MONTHS(SYS
--------------
08-12月-19
指定日期,下一个星期几的日期
next_day(x,y)
x 为日期,y为字符型时,取值从 星期一 到星期日
y为数字时,取值从1~7,不过1表示星期日,2表示星期一,6表示星期五
如当前日期为2019年7月8号时
select next_day(sysdate,'星期一') from dual; --查询当前日期之后,第一个星期一的日期 select next_day(sysdate,2) from dual;--同上
运行结果均为:
NEXT_DAY(SYSDA
--------------
15-7月 -19
select next_day(sysdate,'星期二') from dual;--查询当前日期之后,第一个星期二的日期
运行结果为:
NEXT_DAY(SYSDA
--------------
09-7月 -19
select next_day(sysdate,2) from dual;--查询当前日期之后,第一个星期一的日期
运行结果为:
NEXT_DAY(SYSDA
--------------
15-7月 -19
指定日期,所在月份的最后一天 last_day
select last_day(sysdate) from dual;
运行结果:
LAST_DAY(SYSDA
--------------
31-7月 -19
按照规则对日期进行四舍五入 round
select round(sysdate,'year') from dual;
运行结果:
ROUND(SYSDATE,
--------------
01-1月 -20
select round(sysdate,'month') from dual;
运行结果:
ROUND(SYSDATE,
--------------
01-7月 -19
按照规则对日期进行截断 trunc
select trunc(sysdate,'year') from dual;
运行结果:
TRUNC(SYSDATE,
--------------
01-1月 -19
select trunc(sysdate,'month') from dual;
运行结果:
TRUNC(SYSDATE,
--------------
01-7月 -19
获取日期的年份或月份等 extract
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
运行结果:
EXTRACT(YEARFROMSYSDATE)
------------------------
2019
转换函数
日期或数字按指定格式转换成字符串 to_char
日期转字符串:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
运行结果:
TO_CHAR(SYSDATE,'YY ------------------- 2019-07-08 14:18:35
数字转字符串:
格式中,'9' 代表一位数字,'0' 代表零,'$' 代表美元符,'L' 代表本地货币符号, '.' 表示小数点, ',' 表示千位符号
前后0多了结果都会有0,前面9多了没有0,后面9多了有0
结果前面会有空格,可以采用trim去掉空格
指定格式字符串转换成日期 to_date
select to_date('1999-01-01','yyyy-mm-dd') from dual;
运行结果:
TO_DATE('1999- -------------- 01-1月 -99
字符串转换成数字 to_number
select to_number('2')+to_number('3') from dual;
运行结果:
TO_NUMBER('2')+TO_NUMBER('3') ----------------------------- 5
通用函数
nvl(a,b) 滤空函数,当a为空时取b的值
nvl2(a,b,c) 滤空函数,当a为空时取c的值,否则取b的值
nullif(a,b) a与b相等时返回null,否则返回a
coalesce(a,b,c,.....) 返回第一个不为空的值
多行函数
多行函数,也叫组函数或分组函数。作用于一组数据,并对一组数据返回一个值
1.组函数会忽略空值,要想把空值也包含在内,可以使用滤空函数
2.分组函数去重
3.select列表中除了组函数外,其他列都必须包含在group by 子句中
4.分组之后进行条件查询使用having,where后面不能有组函数