Oracle中常用日期函数to_char()、to_date()、add_months()、last_day()、next_day()的使用

目录

    • 日期数据类型
    • 1)to_char(date, m)
    • 2)to_date(date, m)
    • 3)add_months(date, n)
    • 4)last_day(date)
    • 5)next_day(date, m)

日期数据类型

时区 返回的数据类型 输出格式
current_date 会话的时区 date 2018.12.23 21:59:49
current_timestamp 会话的时区 timestamp with time zone 23-12月-18 09.59.49.350000 下午 +08:00
localtimestamp 会话的时区 timestamp 23-12月-18 09.59.49.350000 下午
sysdate 数据库服务器的时区 date 2018.12.23 21:59:49
systimestamp 数据库服务器的时区 timestamp with time zone 23-12月-18 09.59.49.350000 下午 +08:00
-- dual 为Oracle中的虚拟表
-- 5 种日期的使用
select current_date, current_timestamp, localtimestamp, sysdate, systimestamp
from dual;		--输出结果于上面表格的输出格式

推荐使用:在Oracle 8i以前的版本,只能使用sysdate,为了数据库的版本兼容性,推荐使用sysdate

1)to_char(date, m)

将日期型数据转换成指定模式的字符型数据,可用于取单个年、月、日、时、分、秒
date: 日期函数,可以是 current_date, current_timestamp, localtimestamp, sysdate, systimestamp …
m: 指定要转换成的模式(将日期以该模式的形式返回)

-- dual为Oracle提供的虚拟表
-- 取时间日期
select sysdate from dual;		// 2018.12.24 22:09:23
-- 在小时那里不加24,则默认取12小时制
select to_char(sysdate, 'YYYY-MM-DD HH:MI:SS') from dual;   // 2018-12-24 10:09:23
select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual; // 2018-12-24 22:09:23
-- 取日期
select to_char(sysdate, 'YYYY-MM-DD') from dual;	// 2018-12-24
-- 取年
select to_char(sysdate, 'YYYY') from dual;		// 2018
-- 取月
select to_char(sysdate, 'MM') from dual;		// 12
-- 取日
select to_char(sysdate, 'DD') from dual;		// 24

-- 取时间
select to_char(sysdate, 'HH24:MI:SS') from dual;	// 22:09:23
-- 取小时,不加24时,时间为12小时制
select to_char(sysdate, 'HH24') from dual;	// 22
-- 取分钟
select to_char(sysdate, 'MI') from dual;	// 09
-- 取秒钟
select to_char(sysdate, 'SS') from dual;	// 23

2)to_date(date, m)

将字符型日期数据转换成日期数据类型(字符转日期),与to_char()相反,可用于计算两个日期之间相隔的时间
date: 日期字符串数据
m: 指定要转换成标准日期的格式

-- 转换成标准日期数据后,-(杆)会变成 . (点)
select to_date('2018-12-23', 'YYYY-MM-DD') from dual;	// 2018.12.23
select to_date('2018-12-23 15:48:55', 'YYYY-MM-DD HH24:MI:SS') from dual;  // 2018.12.23 15:48:55

-- 计算两个日期之间相隔的天数
select sysdate - to_date('2018-01-01', 'yyyy-mm-dd') from dual; // 359.980231

3)add_months(date, n)

在给定的日期的月份上再加 n 个月,当 n 为负数时,月份减 n
date: 给定的日期数据(注意:不能是字符串形的日期,只能是日期数据类型的)
n: 月份要增加的数

-- 2018.12.24 增加两个月,既是 2019.02.24
select add_months(sysdate, 2) from dual;	// 2019.02.24 23:47:37

-- 可使用指定日期,先使用to_date()函数将字符串型日期转换成标准日期数据类型
-- 2018-8-24 增加两个月,既是 2018.10.24
select add_months(to_date('2018-8-24', 'YYYY-MM-DD'), 2) from dual;	// 2018.10.24

-- 第二个参数为负数时(减),2018-8-24 减去两个月,既是 2018.06.24
select add_months(to_date('2018-8-24', 'YYYY-MM-DD'), -2) from dual; // 2018.06.24

4)last_day(date)

返回指定日期的那个月的最后一天的日期

-- 取当前服务器日期的月份的最后一天的日期
select last_day(sysdate) from dual;	 // 2018.12.31 0:01:42

-- 使用 to_char()函数,只取日期部分
select to_char(last_day(sysdate), 'YYYY-MM-DD') from dual;  // 2018-12-31

-- 返回指定日期的那个月的最后一天的日期,可用to_date() 函数指定日期
select last_day(to_date('2018-8-24', 'YYYY-MM-DD')) from dual;  // 2018.08.31

5)next_day(date, m)

返回下一个星期X的日期

-- 当前日期 2018.12.25 0:05:46
select sysdate from dual;

-- 注意:此处的下一个不是下一个星期的下,而是正如函数名下一天的下
-- 下一个星期一 2018.12.31 0:05:46
select next_day(sysdate, '星期一') from dual;
-- 下一个星期二 2019.01.01 0:05:46
-- 如果当前日期是星期二,则返回的日期不是当前的日期,而是下一个星期二的日期
select next_day(sysdate, '星期二') from dual;
-- 下一个星期三 2018.12.26 0:05:46
select next_day(sysdate, '星期三') from dual;
-- 下一个星期四 2018.12.27 0:05:46
select next_day(sysdate, '星期四') from dual;
-- 下一个星期五 2018.12.28 0:05:46
select next_day(sysdate, '星期五') from dual;
-- 下一个星期六 2018.12.29 0:05:46
select next_day(sysdate, '星期六') from dual;
-- 下一个星期日 2018.12.30 0:05:46
select next_day(sysdate, '星期日') from dual;

-- 可以不用服务器的日期,自己指定日期,不过需要使用to_date()函数转换成日期数据类型
select next_day(to_date('2018-8-24', 'YYYY-MM-DD'), '星期一') from dual;  // 2018.08.27

你可能感兴趣的:(Oracle)