是否有“简单”的方法来计算两个日期之间某一天的计数(例如,我想知道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
函数可以用于特定月份。我应该知道的任何其他相关功能?
答案 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' --
/