函数

单行函数

大小写函数

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后面不能有组函数

原文地址:https://www.cnblogs.com/shizunatsu/p/11156852.html