
select sysdate - to_date('20141020', 'yyyymmdd') from dual;
oracle里日期型之间是可以直接运算的,这样的结果就是现在的时间和2014-10-20日之间间隔的天数,注意这个值是有小数位的,即两个日期值之间的精确计算的差值,如果需要结果为整数的天数,对结果turnc、round即可。
Oracle中两个to_date相减能得到天数,解决方法如下:
1、首先打开Oracle管理工具,执行如下图所示的语句来查询一下系统时间,会看到显示的并不是平常用到的。
2、接下来就可以通过to_char函数来对日期函数进行转换一下,如下图所示,第一个参数是时间,第二个是格式化类型。
3、另外也可以通过To_Char函数来对日期进行拆分,分别取出年月日,如下图所示。
4、接下来还可以通过To_Date函数来对字符串进行日期转换,如下图所示。
5、最后,还可以通过To_number函数来将字符数字转换为数字来进行运算,如下图所示。
建一个日期表
v_date
2014-09-19
2014-09-20
2014-09-21
2014-09-22
2014-09-23
2014-09-24
2014-09-25
2014-09-26
2014-09-27
2014-09-28
2014-09-29
2014-09-30
select aid,count(distinct v_date)
from test a, test_date b
where v_Date between start_date and end_date
group by aid
id (No column name)
111 6
112 2
相差的天数用months_between()函数
exp:SQL>select months_between(sysdate,to_date('2015-08-08','yyyy-mm-dd')) from dual;
没有求相差的月数函数,还有后面那句"天数取的是月数抛开后的零头"我没看懂
以2015年12月1日至2015年12月31日为例。其中周六和周日算周末。
查询除周末以外的天数(oracle中以周日为1,周一为2……周六为7),可用如下语句:
with t as(select rownum-1 rn from dual connect by rownum<=100)
select count() from t
where to_char(to_date('2015-12-01','yyyy-mm-dd')+rn,'yyyy-mm-dd') between '2015-12-01' and '2015-12-31'
and to_char(to_date('2015-12-01','yyyy-mm-dd')+rn,'d') not in (6,7);
查询结果:
查日历可得,2015年12月1日至2015年12月31日期间,周六周日的天数合计8天,31-8=23,与语句所得结果一致。
楼上的只统计了一个月的吧
WITH t AS(SELECT ROWNUM
FROM DUAL
CONNECT BY ROWNUM <= 12)
SELECT TO_CHAR (LAST_DAY (TO_DATE ( TO_CHAR (SYSDATE, 'YYYY')
|| LPAD (TO_CHAR (ROWNUM), 2, 0),
'YYYYMM'
)
),
'YYYY-MM'
)
|| '月',
TO_CHAR (LAST_DAY (TO_DATE ( TO_CHAR (SYSDATE, 'YYYY')
|| LPAD (TO_CHAR (ROWNUM), 2, 0),
'YYYYMM'
)
),
'DD'
)
|| '天'
FROM t
直接全选复制粘贴运行
以上就是关于Oracle 获得两个日期之间间隔的月份数和天数全部的内容,包括:Oracle 获得两个日期之间间隔的月份数和天数、Oracle中两个to_date相减能得到天数吗、Oracle中统计用户在线天数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)