使用Oracle SQL时,为什么选择语句
select to_char(to_date('31-DEC-18'), 'YYYY-IW')
from dual;
返回“ 2018-01”?
我了解“ IW”使用的是我想使用的ISO标准,但是据我的研究可知,根据ISO标准,2018年12月31日发生在2019年的第1周。所以我理解为什么select语句为“ IW”返回“ 01”,但是为什么它为“ YYYY”返回“ 2018”?语句不应该返回'2019-01'吗?
对于我使用的数据,最好使用IW而不是WW。
答案 0 :(得分:6)
根据Oracle documentation,您可能需要的是ISO年份格式IYYY
:
SQL> select to_char( date '2018-12-31', 'IYYY-IW')
2 from dual;
TO_CHAR
-------
2019-01
顺便说一句,通过编写to_date('31-DEC-18')
,您所依据的是一些假设,这些假设可能并不总是正确的。日期的一种更安全的写法是ANSI格式:date '2019-12-31'
答案 1 :(得分:1)
ISO年份2019从2018年12月31日开始。所有星期从星期一开始,按照所使用的规则,即2019年的第一周。Oracle正确进行了计算。 ISO日期在线有方便的references。
您可能想查看ISO周和年的规则,例如在Wikipedia中说。