oracle数据库
1、获取当前时间
select sysdate() from dual;
2、加减某个时间间隔
select sysdate+ 1/24 from dual;
sysdate+ 1表示时间加一天,1/24表示时间加一小时;
select sysdate, add_months(sysdate,4) from dual;--增加4个月
select sysdate, add_months(sysdate,12*4) from dual;--增加4年
对当前时间作减法,直接在数字前加上‘-"即可。
DM7 和SQL Server 也可以用dateadd(datepart,number,date)函数进行时间加减
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' minute from dual;
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual;
当前时间减去7天的时间
select sysdate - interval '7' day from dual;
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual;
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual;
3、日期相减
注:oracle时间差是以天数为单位,所以换算成年月,日
获取两个日期间的天数
select floor(sysdate - to_date(‘20220405’,‘yyyymmdd’)) from dual;
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-年
select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-月
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //时间差-天
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-时
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-分
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒
月份差
a_date between to_date('20211201','yyyymmdd') and to_date('20211231','yyyymmdd')
4、日期和字符相互转换方法(to_date,to_char)
to_date() 将str类型的日期转换成时间类型的日期
to_char() 将时间类型的日期转换成str类型的日期
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月
select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日
select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时
select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分
select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒
select to_date('2022-05-08 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual //
5、int时间类型转为datetime类型
将时间戳转化成日期格式
SELECT TO_CHAR(时间戳的那一列 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE FROM 表名 ;
select to_char(1112070645 / ( 60 * 60 * 24) +
to_date('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') as cdate from dual;
6、时间比较
select dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj
from stati_rlgl_pmcsrb_zh where 1=1 and '2022-04-24' = to_char(haomrq,'yyyy-mm-dd') order by dcno asc;
select dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj
from stati_rlgl_pmcsrb_zh where 1=1 and haomrq= to_date('2022-04-24 09:12:23','yyyy-mm-dd hh24:mi:ss') order by dcno asc;
7、其他时间函数
trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
select sysdate S1,
trunc(sysdate) S2, //返回当前日期,无时分秒
trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒
trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒
trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒
from dual;
获取当前时间是一年的第几天:
select to_char(sysdate,'DDD'),sysdate from dual;
找出今年的天数:
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
5秒钟一个间隔:
select to_date(floor(to_char(sysdate,'SSSSS')/300) * 300,'SSSSS') ,to_char(sysdate,'SSSSS') from dual;
格式输出 :
select extract(DAY from interval)||'天'||extract(HOUR from interval)||'小时'||extract(MINUTE from interval)||'分钟'||extract(SECOND from interval)||'秒' 间隔 from (
select numtodsinterval(to_date('2008-10-09 12:30:18','yyyy-mm-dd hh24:mi:ss
')-to_date('2008-10-28','yyyy-mm-dd'),'DAY') interval from dual)
round舍入到最接近的日期
select sysdate S1,
round(sysdate) S2 ,
round(sysdate,'year') YEAR,
round(sysdate,'month') MONTH ,
round(sysdate,'day') DAY from dual;