两个日期之间的特定天数

时间:2013-05-03 11:34:33

标签: sql oracle

是否有“简单”的方法来计算两个日期之间某一天的计数(例如,我想知道2000年1月1日至今的星期二的数量)?此外,同样的问题更广泛地适用于不同的单位(例如,两个日期之间有多少2个月,有多少个二月,八月二十八个等等)......我想出的最好(日期之间的天数)是这样的:

with calendar as (
  select     to_char(:start + level - 1, 'DAY') dayOfWeek
  from       dual
  connect by level <= ceil(:end - :start)
)
select   dayOfWeek, count(dayOfWeek)
from     calendar
group by dayOfWeek;

我必须创建一个视图 - 硬编码开始和结束日期 - 以方便(ish)使用;或者写一个函数来做脏工作。这并不困难,但我想知道是否已经有一个可以做到这一点的Oracle功能,可以解决闰日等问题。


发布此内容时,

编辑 This会在相关链接中弹出。这或多或少回答了这个问题好几天,我知道有一个months_between函数可以用于特定月份。我应该知道的任何其他相关功能?

1 个答案:

答案 0 :(得分:1)

将开始/结束日期替换为您的日期。此查询从2013年1月1日至今的TUE的计算结果编号为18:

SELECT count(*) number_of_tue
  FROM
 (
 SELECT TRUNC(TO_DATE(Sysdate), 'YEAR') + LEVEL-1 start_dt
      , To_Char(TRUNC(TO_DATE(Sysdate), 'YEAR') + LEVEL - 1, 'DY') wk_day
      , To_Char(TRUNC(TO_DATE(Sysdate), 'YEAR') + LEVEL - 1, 'D')  wk_day#
      , trunc(Sysdate) end_dt
  FROM DUAL
 CONNECT BY LEVEL <= trunc(Sysdate) - trunc(Sysdate, 'YEAR') -- replace with your start/end dates
 )
 WHERE wk_day# = 3 -- OR wk_day = 'TUE' -- 
/