两个日期之间的特定天数
Posted
技术标签:
【中文标题】两个日期之间的特定天数【英文标题】:Number of particular days between two dates 【发布时间】:2013-05-03 11:34:33 【问题描述】:是否有一种“简单”的方法来计算两个日期之间特定日期的计数(例如,假设我想知道 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 函数可以做到这一点,包括闰日等。
编辑 This 在我发布此内容时出现在相关链接中。这或多或少地回答了几天的问题,我知道有一个 months_between
函数可以在特定月份使用。我还应该了解其他任何相关功能吗?
【问题讨论】:
查看 docs.oracle.com/cd/E11882_01/server.112/e26088/… 获取 Oracle 日期函数列表。 为自己建立一个Calendar table,所有的约会问题都会消失。 【参考方案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' --
/
【讨论】:
谢谢,但这与我的查询有何不同?您只是使用子查询而不是 CTE。 没有区别。你所谓的 CTE 或我的查询。在发布我的查询之前,我没有检查您的查询。我的查询有更多日期来测试和查看实际日期,以及工作日等...选择任何一个来创建视图。这再简单不过了。以上是关于两个日期之间的特定天数的主要内容,如果未能解决你的问题,请参考以下文章
(Java / Android) 计算两个日期之间的天数并以特定格式呈现结果