ORACLE SQL日期处理
开发工具与关键技术:Oracle sql*plus PLSQL Developer
撰写时间:2019年04月07日
这篇日期处理主要表达的是, 使用日期的一些相关函数处理日期,得出想要的结果。
相关函数:
MONTHS_BETWEEN: 两个日期相差的月数
简单理解:意思:给出两个年月日,自动算出,而不用再写些相减,还要算月份那些
格式:SELECT 空格 函数(日期,日期) 空格 from 空格 表名
格式说明:相差函数(日期,日期)这里必须是日期格式才能使用,不符合就会报错,可以像下图一样转换
ADD_MONTHS: 向指定日期中加上若干月数
简单理解:就是在基础月上添加想要的月个数
格式:查询 空格 函数(日期,月个数)空格 from 空格 表名
NEXT_DAY: 指定日期的下一个星期 x 对应的日期
简单理解:例如这个日期7号(星期日),我要知道下个星期五,那这个星期五就是从7号开始往下找,找到星期五那个日期
格式:查询 空格 函数(日期,’下个星期几’)空格from 表名
LAST_DAY: 本月的最后一天
简单理解:就是给出的日期的本月最后一天
格式:查询 空格 函数(日期)空格 from 空格 表名
ROUND 日期四舍五入
简单理解:就是将日期进行四舍五入,当号数满15就进一(加一个月),当月数满6就进一(加一年)天数的个人也不知道怎么理解,所以没有写天
格式 :查询 空格 函数(日期,’月或者年的函数’)空格 from 空格 表名
TRUNC 日期截断
简单理解:就是将日期直接截断,没有四舍五入的了,在月截断就是号回复到1号,年截断就是回复到一月
格式 :查询 空格 函数(日期,’月或者年的函数’)空格 from 空格 表名
相关例子:
MONTHS_BETWEEN的例子
SELECT MONTHS_BETWEEN(sysdate,to_date('1999-02-08','yyyy-mm-dd'))
from DEPT
这里为什么会有小数呢,sysdate有日期与时间结合起来的,
更明显的例子
SELECT MONTHS_BETWEEN(to_date('1999-03-08','yyyy-mm-dd'),to_date('1999-02-08','yyyy-mm-dd'))
from DEPT;
ADD_MONTHS的例子
两个月后的现在
SELECT ADD_MONTHS(sysdate,2)
from DEPT;
当然也是可以使用转换函数的
SELECT ADD_MONTHS(to_date('1999-01-08','yyyy-mm-dd'),2)
from DEPT;
NEXT_DAY的例子(注意:我这里是汉化过来的,所以是中文的星期六)
SELECT NEXT_DAY(to_date('1999-01-08','yyyy-mm-dd'),'星期六')
from DEPT;
LAST_DAY的例子(它主要一个日期就可以的了)
SELECT LAST_DAY(to_date('1999-01-08','yyyy-mm-dd'))
from DEPT;
ROUND的例子
SELECT ROUND(to_date('1999-02-14','yyyy-mm-dd'),'MONTH')//月的函数就会把号进行四舍五入,然后归一
from DEPT;
年的就会将月与号都会归一
SELECT ROUND(to_date('1999-02-14','yyyy-mm-dd'),'YEAR') from DEPT;
TRUNC的例子,
直接在月截断,号归一,号是16也没法进一
SELECT TRUNC(to_date('1999-10-16','yyyy-mm-dd'),'month')
from DEPT;
直接在年截断,月与号都归一,月与号都没法进一
SELECT TRUNC(to_date('1999-10-16','yyyy-mm-dd'),'year')
from DEPT;