--按周分组:自然周 和 年的第一天算7天为一周 select to_char(时间字段,'yyyy-IW'),其他字段 from 操作表 groupby to_char(时间字段,'yyyy-IW'); select to_char(时间字段,'yyyy-WW'),其他字段 from 操作表 groupby to_char(时间字段,'yyyy-WW');
--按月份分组 select to_char(时间字段,'yyyy-mm'),其他字段 from 操作表 groupby to_char(时间字段,'yyyy-mm');
--按季度分组 select to_char(时间字段,'yyyy-Q'),其他字段 from 操作表 groupby to_char(时间字段,'yyyy-Q');
--按年分组 select to_char(时间字段,'yyyy'),其他字段 from 操作表 groupby to_char(时间字段,'yyyy');
日期类型和字符类型转换函数
to_char
1 2 3 4 5 6 7
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 extract(yearfrom systimestamp) year ,extract(monthfrom systimestamp) month ,extract(dayfrom systimestamp) day ,extract(minutefrom systimestamp) minute ,extract(secondfrom systimestamp) second ,extract(timezone_hourfrom systimestamp) th ,extract(timezone_minutefrom systimestamp) tm ,extract(timezone_region from systimestamp) tr ,extract(timezone_abbr from systimestamp) ta from dual
时间差
年份差(相差月数/12)
1 2 3 4 5 6 7
select ((months_between(TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2016-5-31','yyyy-mm-dd hh24:mi:ss')))/12) As 相差年份 from dual; --结果:2 select trunc(months_between(sysdate, to_date('2017-01-01','yyyy-mm-dd')) /12) As 相差年份 from dual; --结果:6 SELECTEXTRACT(YEARFROM SYSDATE) -EXTRACT(YEARFROM TO_DATE('2017-01-01','YYYY-MM-DD')) As 相差年份 YEARS FROM DUAL; --结果:6
--Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('2023-3-2','yyyy-mm-dd hh24:mi:ss')- TO_DATE('1999-7-15','yyyy-mm-dd hh24:mi:ss')) AS 相差天数 from dual; --8631
相差小时数,分钟数,秒数(时制进行转换)
1 2 3 4 5 6 7 8 9 10 11
--Oracle中两个日期相差小时数-- select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24) AS 相差小时数 from dual; --Oracle中两个日期相差分钟数-- select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60) AS 相差分钟数 from dual; --Oracle中两个日期相差秒数-- select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60*60) AS 相差秒数 from dual;
日期加减法
在Oralce中我发现有add_months函数,加天数N可以用如下方法实现,select sysdate+N from dual;