Oracle SQL-为什么从双中选择to_char(to_date('31 -DEC-18'),'YYYY-IW');返回2018-01?

Kat*_*eed 0 sql oracle

使用Oracle SQL时,为什么选择语句

select to_char(to_date('31-DEC-18'), 'YYYY-IW') 
from dual;
Run Code Online (Sandbox Code Playgroud)

返回“ 2018-01”?

我了解'IW'使用的是我想要使用的ISO标准,但是据我的研究可知,根据ISO标准,2018年12月31日发生在2019年的第1周。所以我理解为什么select语句为“ IW”返回“ 01”,但是为什么它为“ YYYY”返回“ 2018”?语句不应该返回'2019-01'吗?

对于我正在使用的数据,最好使用IW而不是WW。

Ale*_*sej 6

IYYY根据Oracle文档,您可能需要的是ISO年格式:

SQL> select to_char( date '2018-12-31', 'IYYY-IW')
  2  from dual;

TO_CHAR
-------
2019-01
Run Code Online (Sandbox Code Playgroud)

顺便说一句,通过撰写本文,to_date('31-DEC-18')您依赖于一些假设,这些假设可能并不总是正确的。ANSI格式是一种更安全的日期写方法:date '2019-12-31'