Oracle获取日期查询处理&近一年的所有月份&一个月的全部日期&当前年至今的所有月份

一个月的全部日期

SELECT to_char(TRUNC(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-MM-dd'), 'MM') + ROWNUM - 1, 'yyyy-MM-dd') as day 
FROM dual
connect by  to_char(last_day(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-MM-dd')), 'dd') >= ROWNUM

在这里插入图片描述

查询近一年的所有月份

select to_char(add_months(sysdate, -t.rn), 'yyyy-mm')
from dual a, (select rownum - 1 rn from dual connect by rownum <= 12) t
 order by to_char(add_months(sysdate, -t.rn), 'yyyy-mm')

或者

select to_char(add_months(sysdate,-ROWNUM+1), 'yyyy-MM') day from dual  connect by  12 >= ROWNUM

在这里插入图片描述

mysql的写法,和上面是一样的效果:
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL t.rn MONTH), '%Y-%m')
FROM (SELECT (ROW_NUMBER() OVER ()) - 1 AS rn FROM information_schema.tables LIMIT 12) t
ORDER BY DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL t.rn MONTH), '%Y-%m');

查询当前年至今的所有月份

select to_char(add_months(sysdate, -t.rn), 'yyyy-mm')
from dual a, (select rownum - 1 rn from dual connect by rownum <= 12) t
 where to_char(add_months(sysdate, -t.rn), 'yyyy') =to_char(sysdate, 'yyyy')
 order by to_char(add_months(sysdate, -t.rn), 'yyyy-mm')

在这里插入图片描述

获取当前时间90天内连续日期

select to_char(add_days(sysdate,-ROWNUM+1), 'yyyy-MM-dd') day 
from dual  connect by  90 >= ROWNUM

查询当前时间

查询当前时间
select sysdate from dual;

查询当前时间并格式化日期
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi') from dual;

日期格式化

yyyy 可换成其他格式:MM、dd、Q、iw
MM:月 ---------------dd:日
Q:季度 ---------------- iw:周

select to_char(sysdate, 'yyyy' ) from dual; --年

当前时间减少日期

MINUTE 可替换成其他字段:hour 、day 、month 、year

     1分钟内的数据
 select sysdate,sysdate - interval '1' MINUTE from dual;

查询这个月的第一天/最后一天

   第一天
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -1)) + 1 FROM DUAL; 

   最后一天
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, 0)) FROM DUAL;

查询连续日期的统计个数

一组数据,根据MN来统计连续日期的天数

在这里插入图片描述

统计结果应该为:4、2、2、2、5

在这里插入图片描述

利用开窗思想以及辅助列的方式新增出一列来帮我们记录哪些日期才是连续的

--去重MN,分别取出连续日期的开始时间和结束时间,统计个数
 select distinct mn,min(intime) ksrq,max(intime) jsrq,count(*) cs from
	(
		SELECT mn,intime,XH,trunc(intime)-xh as  rq2 --连续的日期得出的辅助列是相同
			FROM
			(	-- 使用PARTITION BY 来帮助生成序号
			SELECT mn,intime,ROW_NUMBER()OVER(PARTITION BY mn ORDER BY intime) XH
			FROM YQHS.QY_ALARMINFO --表
			where intime <sysdate and intime >sysdate-11 --相应的条件
			)
	)group by mn,rq2;--根据MN编号和辅助列统计

输出结果:和预想的结果一致

在这里插入图片描述

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值