在Oracle中,“每周的第一天”设置为星期日,而不是星期一

时间:2018-07-13 12:50:34

标签: sql oracle week-number

我有以下查询:

SELECT forecastDate, to_char(to_date(forecastDate),'WW') AS WEEK_NUMBER
FROM ACT_FORECAST

哪个给我这个结果:

forecastDate | WEEK_NUMBER
14/07/2017     28
15/07/2017     28
16/07/2017     29

但是在我所在的地区,从星期一开始的那一周,我应该在2017年7月16日有28点。

我的数据库的NLS_TERRITORY值为“法国”。

我尝试了多种方法,但无济于事。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:3)

原因是格式WW,其中documentation表示:

  

WW

     

一年中的第几周(1-53),第1周从一年的第一天开始   并持续到一年的第七天。

幸运的是,根据ISO-8601,一周的第一天也是星期一,因此您可以使用

SELECT forecastDate, to_char(to_date(forecastDate),'IW') AS WEEK_NUMBER
FROM ACT_FORECAST
  

IW

     

ISO 8601定义的每年的日历周(1-52或1-53)   标准。

     
      
  • 一个日历周从星期一开始。

  •   
  • 一年中的第一个日历周包括1月4日。

  •   
  • 一年中的第一个日历周可能包括12月29日,30日和31日。

  •   
  • 一年中的最后一个日历周可能包括1月1日,2日和3日。

  •   

顺便说一句,您应该将列forecastDate的数据类型更改为DATETIMESTAMP