在oracle中计算两个日期之间的周数

在oracle中计算两个日期之间的周数,oracle,Oracle,我使用以下查询查找两个日期之间的周数: select count(week_id) from fw where week_begin_date >= '2015-01-01' and week_end_date <= '2015-12-31'; 选择计数(周\u id) 来自fw 周开始日期>='2015-01-01' 和周末日期你试过这个吗: SELECT REPLACE(( to_date('20151231','yyyymmdd') - to_da

我使用以下查询查找两个日期之间的周数:

select  count(week_id) 
from fw 
where week_begin_date >= '2015-01-01' 
and  week_end_date <= '2015-12-31';
选择计数(周\u id)
来自fw
周开始日期>='2015-01-01'
和周末日期你试过这个吗:

SELECT 
  REPLACE(( 
     to_date('20151231','yyyymmdd') - to_date('20150101','yyyymmdd')
  )/7, '-', '')
FROM
  DUAL
你试过这个吗:

SELECT 
  REPLACE(( 
     to_date('20151231','yyyymmdd') - to_date('20150101','yyyymmdd')
  )/7, '-', '')
FROM
  DUAL

你不能只使用一年中的一周功能吗?如果需要,减去

 select to_char(to_date('12/31/2015','MM/DD/YYYY'),'WW') from dual;


select To_Number(to_char(to_date('12/31/2015','MM/DD/YYYY'),'WW')) - 
       To_number(to_char(to_date('01/01/2015','MM/DD/YYYY'),'WW')) +1
from dual;
我们必须添加+1,因为周从1开始,而不是从0开始

现在,您可能想要的是ISO周格式,它将是
IW
,而不是
WW

WW:一年中的一周(1-53),其中第一周从一年中的第一天开始,持续到一年中的第七天


IW:基于ISO标准的一年中的一周(1-52或1-53)。

您不能只使用一年中的一周功能吗?如果需要,减去

 select to_char(to_date('12/31/2015','MM/DD/YYYY'),'WW') from dual;


select To_Number(to_char(to_date('12/31/2015','MM/DD/YYYY'),'WW')) - 
       To_number(to_char(to_date('01/01/2015','MM/DD/YYYY'),'WW')) +1
from dual;
我们必须添加+1,因为周从1开始,而不是从0开始

现在,您可能想要的是ISO周格式,它将是
IW
,而不是
WW

WW:一年中的一周(1-53),其中第一周从一年中的第一天开始,持续到一年中的第七天


IW:基于ISO标准的一年中的一周(1-52或1-53)。

我知道这是一个非常古老的线程,但我今天使用了此代码的修改版本,我认为可能对其他人有益。我的修改解决了分数周问题,并删除了减号:

SELECT 
  CEIL(
       ABS(
            (  
               TO_DATE('20160101','YYYYMMDD')
             - TO_DATE('20161231','YYYYMMDD')
            ) / 7 
           )
      ) AS DT
FROM DUAL
ABS函数获取减去两个日期的结果的绝对值,从而消除减号(如果减号存在的话)(我切换了日期的顺序以证明这一点)。CEIL函数将任何小数周舍入到下一个整周(我将年份改为2016年,以证明CEIL在逻辑上等同于Excel中的舍入函数)。注意:我们必须首先应用ABS函数(内括号),因为CEIL也会对负数进行取整,如果在CEIL之后应用ABS,则实际上会对周进行取整。这个计算的结果是53(减去日期返回大约-52.142857,ABS删除减号,CEIL四舍五入到53)


我希望这最终对某人有用。谢谢。

我知道这是一个非常旧的线程,但我今天使用了此代码的修改版本,我认为这可能对其他人有益。我的修改解决了分数周问题,并删除了减号:

SELECT 
  CEIL(
       ABS(
            (  
               TO_DATE('20160101','YYYYMMDD')
             - TO_DATE('20161231','YYYYMMDD')
            ) / 7 
           )
      ) AS DT
FROM DUAL
ABS函数获取减去两个日期的结果的绝对值,从而消除减号(如果减号存在的话)(我切换了日期的顺序以证明这一点)。CEIL函数将任何小数周舍入到下一个整周(我将年份改为2016年,以证明CEIL在逻辑上等同于Excel中的舍入函数)。注意:我们必须首先应用ABS函数(内括号),因为CEIL也会对负数进行取整,如果在CEIL之后应用ABS,则实际上会对周进行取整。这个计算的结果是53(减去日期返回大约-52.142857,ABS删除减号,CEIL四舍五入到53)


我希望这最终对某人有用。谢谢。

count(*)
代替
week\u id
怎么样。这也给你51分了吗?或者它给你53?什么是“周开始日期”和“周结束日期”的数据类型?你访问一个名为“fw”的表。。但是,您没有提供结构,也没有提供任何关于其中数据外观的提示。在您提供该信息之前,我们无法回答您的问题。您如何定义
周数
?结果取决于一周的开始和结束时间(周一到周日或周日到周六)。你说的是日历周吗?还是实际的几周?从今天到下周二是一周,跨越两个日历周,因此根据您正在计算的具体规则,一个或两个答案可能是可以接受的。不如使用
count(*)
而不是
week\u id
。这也给你51分了吗?或者它给你53?什么是“周开始日期”和“周结束日期”的数据类型?你访问一个名为“fw”的表。。但是,您没有提供结构,也没有提供任何关于其中数据外观的提示。在您提供该信息之前,我们无法回答您的问题。您如何定义
周数
?结果取决于一周的开始和结束时间(周一到周日或周日到周六)。你说的是日历周吗?还是实际的几周?从今天到下周二是一周,跨越两个日历周,因此根据您正在计算的特定规则,一个或两个答案可能是可以接受的。您是否尝试过执行代码<代码>ORA-01843:不是有效的月份
此结果-52:-)天数是365,因此周数应该是52(@FrankOckenfuss,由于指出了减号),不一定是真的。2015年从周四开始;这是第一周,即使它是不完整的。12月27日是2015年的最后一周,也就是第53周;也不完整。总共有52个星期+另一个星期的一小部分。因此,根据你如何计算分数,可能有53周。使用oracle的weekofyear函数,您将在2015年12月31日获得53。谢谢@xQbert,我也知道这一点,但不知道如何解决这个问题。真的很感谢新的学习你试过执行你的代码吗<代码>ORA-01843:不是有效的月份此结果-52:-)天数是365,因此周数应该是52(@FrankOckenfuss,由于指出了减号),不一定是真的。2015年从周四开始;这是第一周,即使它是不完整的。12月27日是2015年的最后一周,也就是第53周;也不完整。总共有52个星期+另一个星期的一小部分。因此,根据你如何计算分数,可能有53周。使用oracle的weekofyear函数,您将在2015年12月31日获得53。谢谢@xQbert,我也知道这一点