0

在 oracle 中,可以更改一周的开始日期。在美国的第一天是太阳,而在欧盟 - 星期一

此更改通过更改 nls_territory 起作用

但是,如果我同时考虑星期几和星期编号,我有以下情况:

day week_number
  7          9   <- here it should be still week 8
  1          9
  2          9
  3          9
  4          9
  5          9
  6          9
  7         10  <- here it should still be week 9

您知道哪些 nls 应该会影响一周的 start_day 吗?

类似的帖子 从周数获取一周的第一天

4

2 回答 2

2

Oracle 有两种日期格式,它们为我们提供周数。

'WW' 从 1 月 1 日开始,每 7 天递增一次。由于 01-JAN-2013 是星期二,这意味着周数在星期二递增。我想这是您目前使用的版本。

但也有“IW”格式,即 ISO 标准。在此版本中,周数从 1 月 1 日所在的一周的星期一开始。这具有使 31-DEC-2012 成为 2013 年第 1 周的第一个日期的特殊副作用,但这确实意味着周数总是在一周的第 1 天递增。

了解更多。

于 2013-01-10T14:34:39.053 回答
0

不确定我是否理解您的问题,并且在您的示例中,我认为 day# 和 week# 之间没有联系,抱歉......也许这会帮助您获得 ISO 周。这建立了年度周表。您可以在查询中添加 'WW' 格式并比较日期、星期的差异。NLS 设置:

   -- ISO_WK# --
   SELECT mydate
    , TRUNC(mydate, 'w') wk_starts
    , TRUNC(mydate, 'w') + 7 - 1/86400 wk_ends
    , TO_NUMBER (TO_CHAR (mydate, 'IW')) ISO_wk#  
   FROM
   (
    SELECT TRUNC(SYSDATE, 'YEAR')-1 + LEVEL AS mydate
      FROM dual
    CONNECT BY LEVEL <= 
      (
        SELECT TRUNC(SYSDATE, 'YEAR')-TRUNC(ADD_MONTHS (SYSDATE, -12), 'YEAR') "Num of Days"   
         FROM dual
      )
   )
  /
于 2013-01-10T14:45:19.393 回答