代码之家  ›  专栏  ›  技术社区  ›  dkackman Srinivas Kokkula

在Oracle中,如何使用非标准的一周的第一天计算一年中的一周?

  •  3
  • dkackman Srinivas Kokkula  · 技术社区  · 14 年前

    我有一个查询需要返回日期字段的“一年中的一周”,但是查询的客户使用的是非标准的一周的第一天,所以 TO_CHAR 'IW' 没有返回预期结果。在这种情况下,一周的第一天是星期六,星期五是一周的第七天。

    使用T-SQL DATEPART SET DATEFIRST .

    甲骨文的等价物是什么?我在谷歌上找到的甲骨文答案都是关于设置 NLS_TERRITORY ALTER SESSION SET NLS_TERRITORY = 'UNITED KINGDOM'; 但我不知道在哪里可以选择任意的一天(除了找到一个使用星期六的区域)。

    2 回复  |  直到 13 年前
        1
  •  5
  •   Craig    14 年前

    我的工作时间是周一到周日,所以这应该能帮你找到你想要的。基本上,从现在开始的第二天开始计算一周:

    to_char(your_date + 2, 'IW')
    
        2
  •  2
  •   Rajesh Chamarthi    14 年前

    Oracle的默认周格式从一年的第一天而不是一周的第一天计算周数。

    因此,如果一年从2009年1月1日开始,第一天是星期三,那么第一周将从2009年1月1日到2009年1月8日(星期三到星期二)。

    http://download-uk.oracle.com/docs/cd/B14117_01/server.101/b10749/ch9sql.htm#CIHGFJEI

    试试下面的代码。我基本上使用“IW”格式并添加一个条件,使周数从给定日期开始。。说…2008年7月1日。

    select target_date, 
            to_char(target_date+1,'iw') week_sun_thru_saturday,
            to_number(to_char(target_date+1,'iw')) -
            to_number(to_char( to_date('10-jul-2008','dd-mon-yyyy')+1,'iw')) week_from_01_jul_2008
    from t;
    

    记住..此代码不会给出从7月1日到7月7日的第1周。当然,除非2008年7月1日是星期日;)