我有以下查询:
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值为“法国”。
我尝试了多种方法,但无济于事。
有什么想法吗?
谢谢
答案 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
的数据类型更改为DATE
或TIMESTAMP
。