2

2 つの日付の間の特定の日の数を計算する「簡単な」方法はありますか (たとえば、2000 年 1 月 1 日から今日までの火曜日の数を知りたいとします)。さらに、同じ質問がさまざまな単位に広く適用されます (たとえば、2 つの日付の間の午後 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;

これのビューを作成する必要があります-開始日と終了日をハードコーディングして、使いやすくします。それか、汚い仕事をする関数を書いてください。それは難しいことではありませんが、うるう日などを考慮して、これを行うことができるOracle関数がすでに存在するかどうか疑問に思っています.


EDIT これを投稿したときに、関連リンクにポップアップしました。それは多かれ少なかれ数日間の質問に答えており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 に答える