返回两个日期间的月份数:
MONTHS_BETWEEN(r1,r2)函数:该函数返回r1日期和r2日期直接的月份。当r1>r2时,返回的是正数,假如r1和r2是不同月的同一天,则返回的是整数,否则返回的小数。当r1<r2时,返回的是负数。
select months_between(to_date('2021-11-12', 'yyyy-mm-dd'),
to_date('2020-11-12', 'yyyy-mm-dd')) as zs, --整数
months_between(to_date('2021-11-12', 'yyyy-mm-dd'),
to_date('2020-10-11', 'yyyy-mm-dd')) as xs, --小数
months_between(to_date('2020-11-12', 'yyyy-mm-dd'),
to_date('2021-10-12', 'yyyy-mm-dd')) as fs --负数
from dual;

日期截取函数:
ROUND(r[,f])函数:将日期r按f的格式进行四舍五入。如果f不填,则四舍五入到最近的一天。
select sysdate, --当前时间
round(sysdate, 'yyyy') as year, --按年
round(sysdate, 'mm') as month, --按月
round(sysdate, 'dd') as day, --按天
round(sysdate) as mr_day, --默认不填按天
round(sysdate, 'hh24') as hour --按小时
from dual;

TRUNC(r[,f])函数:将日期r按f的格式进行截取。如果f不填,则截取到当前的日期。
select sysdate, --当前时间
trunc(sysdate, 'yyyy') as year, --按年
trunc(sysdate, 'mm') as month, --按月
trunc(sysdate, 'dd') as day, --按天
trunc(sysdate) as mr_day, --默认不填按天
trunc(sysdate, 'hh24') as hour --按小时
from dual;

Oracle数值型函数可以是输入一个数值,并返回一个数值的函数,我们经常用到函数如下表:
函数 | 解释 | 案例 | 结果 |
ABS(X) | 求数值X的绝对值 | select abs(-9) from dual; | 9 |
COS(X) | 求数值X的余弦 | select cos(1) from dual; | 0.54030230586814 |
ACOS(X) | 求数值X的反余弦 | select acos(1) from dual; | 0 |
CEIL(X) | 求大于或等于数值X的最小值 | select ceil(7.8) from dual; | 8 |
FLOOR(X) | 求小于或等于数值X的最大值 | select floor(7.8) from dual; | 7 |
log(x,y) | 求x为底y的对数 | select log(2,8) from dual; | 3 |
mod(x,y) | 求x除以y的余数 | select mod(13,4) from dual; | 1 |
power(x,y) | 求x的y次幂 | select power(2,4) from dual; | 16 |
sqrt(x) | 求x的平方根 | select sqrt(16) from dual; | 4 |
round(x[,y]) | 求数值x在y位进行四舍五入。 y不填时,默认为y=0; 当y>0时,是四舍五入到小数点右边y位。 当y<0时,是四舍五入到小数点左边|y|位。 | select round(7.816, 2), round(7.816), round(76.816, -1) | 7.82 / 8 / 80 |
trunc(x[,y]) | 求数值x在y位进行直接截取 y不填时,默认为y=0; 当y>0时,是截取到小数点右边y位。 当y<0时,是截取到小数点左边|y|位。 | select trunc(7.816, 2), trunc(7.816), trunc(76.816, -1) | 7.81 / 7 / 70 |
Oracle转换函数是进行不同数据类型转换的函数,是我们平常数据库开发过程当中用的最多的内置函数。常用的函数有to_char()、to_number()、to_date()等等。详细分析如下表:
函数 | 解释 | 案例 | 结果 |
asciistr(x) | 把字符串x转换为数据库字符集对应的ASCII值 | select asciistr('Oracle技术圈') | Oracle\6280\672F\5708 |
bin_to_num(x1[x2...]) | 把二进制数值转换为对应的十进制数值 | select bin_to_num(1,0,0) from dual; | 4 |
cast(x as type) | 数据类型转换函数,该函数可以把x转换为对应的type的数据类型,基本上用于数字,字符,时间类型安装数据库规则进行互转, | select cast('123' as number) num,cast(123 as varchar2(3)) as ch,cast(to_date('20181112','yyyymmdd') as varchar2(12)) as time | 123/'123'/12-11月-18 (三列值,用"/"隔开) |
convert(x,d_chset[,r_chset]) | 字符串在字符集间的转换函数,对字符串x按照原字符集r_chset转换为目标字符集d_chset,当r_chset不填时,默认选择数据库服务器字符集。 | select CONVERT('oracle技术圈','US7ASCII','ZHS16GBK') from dual; | oracle??? |
to_char(x[,f]) | 把字符串或时间类型x按格式f进行格式化转换为字符串。 | select to_char(123.46,'999.9') from dual; select to_char(sysdate,'yyyy-mm-dd') from dual; | 123.5 2018-11-13 |
to_date(x[,f] | 可以把字符串x按照格式f进行格式化转换为时间类型结果。 | select to_date('2018-11-13','yyyy-mm-dd') from dual; | 2018/11/13 |
to_number(x[,f]) | 可以把字符串x按照格式f进行格式化转换为数值类型结果。 | select to_number('123.74','999.99') from dual | 123.74 |
提醒:其中数值的格式f可以参考下表:
参数 | 示例 | 说明 |
9 | 999 | 指定位置返回数字 |
. | 99.9 | 指定小数点的位置 |
, | 99,9 | 指定位置返回一个逗号 |
$ | $99.9 | 指定开头返回一个美元符号 |
EEEE | 9.99EEEE | 指定科学计数法 |
Oracle聚合函数同时可以对多行数据进行操作,并返回一个结果。比如经常用来计算一些分组数据的总和、平均值之类,常用函数有AVG()、SUM()、MIN()、MAX()等等。
AVG函数
AVG([distinct ] expr):该函数可以求列或列组成的表达式expr的平均值,返回的是数值类型。其中 distinct是可选参数,表示是否去掉重复行。使用该函数和其他聚合函数时,都可以和where条件语句和分组GROUP BY 查询组合使用,得到特定的结果。
COUNT函数
count(*|[distinct]expr)函数可以用来计算查询结果的条数或行数。函数中必须指定列名或者表达式expr,不然就要全选使用*号。
MAX/MIN函数
MAX([distinct] expr)、MIN([distinct] expr)函数可以返回指定列或列组成的表达式expr中的最大值或最小值。该函数也通常和where条件、group by分组结合在一起使用。
SUM函数
SUM([distinct] expr)函数可以对指定列或列组成的表达式expr进行求和,假如不使用分组group by ,那就是按照整表作为一个分组。
,