最近的一个功能定时任务要求在当天凌晨2点生成前一天的数据。涉及到数据库时间的操作,特此记录一下,整理关于日期获取的笔记如下

-- 获取当前系统的前一天日期0点到23:59:59的时间
select  TRUNC(SYSDATE - 1) , TRUNC(SYSDATE - 1)+1-1/86400  from dual;
--获取当天时间的0时0分
select TRUNC(SYSDATE) FROM dual;
--获取当天时间的23点59分59秒(在当天0时0分0秒的基础上加1天后再减1秒)
SELECT TRUNC(SYSDATE)+1-1/86400 FROM dual;
--取得当前日期是一个星期中的第几天,注意:星期日是第一天
select to_char(sysdate,'D'),to_char(sysdate,'DAY') from dual;
--获取当前月的第一天和最后一天
select to_char(sysdate,'yyyy-mm')||'-01' firstday,to_char(last_day(sysdate),'yyyy-mm-dd') lastday from dual;
--获取当前月份
SELECT EXTRACT(MONTH FROM sysdate) FROM DUAL;
--求出当前日期的下一个指定礼拜是几号,意思就是当前日期的下一个星期一是几号
select next_day(sysdate,'星期一') from dual;
--返回当前日期
select trunc(sysdate)from dual;
--返回当前小时
select trunc(sysdate,'hh')from dual;
--返回当前时间的分钟,没有秒的精确,只有毫秒。
select trunc(sysdate,'mi')from dual;
--返回当前星期的第一天(为星期天,工作的第一天为星期一)
select trunc(sysdate,'d')from dual;
--返回当前年份的第一天
select trunc(sysdate,'yyyy')from dual;
--返回当前月份的第一天
select trunc(sysdate,'mm')from dual;
--求当前月份的最后一天
select last_day(sysdate) from dual;
--求当前日期添加月份过后的日期
select add_months(sysdate,2) from dual;
--取出当前日期的年份 
select extract(year from sysdate) from dual;
--取出当前日期的月份
select extract(month from sysdate) from dual;
--取出当前日期的天数
select extract(day from sysdate) from dual;
--拼接日期,将年月日从系统中取出然后拼接年,月,日
select extract(year from sysdate) ||'年'||extract(month from sysdate) ||'月'||extract(day from sysdate) ||'日' from dual;
--时间戳以获取精确的时间
select systimestamp as 国际时间 from dual;
--以指定格式获取日期
select TO_CHAR(sysdate,'yyyy-mm-dd') from dual;
--获取当前时间一个月之后的时间
select add_months(sysdate,1)from dual;
--获取到当前时间半年之后的时间
select add_months(sysdate,6)from dual;
--to_char()函数,将日期转换为字符串表示
select to_char(sysdate,'yyyy"年"mm"月"dd"日"')from dual;
--将数字转换为指定格式,例如转换为货币形式
select to_char(123,'$9,999,999.99')from dual;
--to_number()函数,将一个数字字符串转换为数字,以便进行计算
select to_number('1234567.08') from dual;