2

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

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 函数可以做到这一点,包括闰日等。


编辑当我发布此内容时, 内容会在相关链接中弹出。这或多或少地回答了几天的问题,我知道有一个months_between功能可以在特定月份使用。我应该知道的任何其他相关功能?

4

1 回答 1

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' -- 
/
于 2013-05-03T12:55:35.753 回答