首页 > 解决方案 > Oracle SQL - 为什么选择 to_char(to_date('31-DEC-18'),'YYYY-IW') from dual; 返回 2018-01?

问题描述

使用Oracle SQL时,为什么select语句

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。

标签: sqloracle

解决方案


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

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'


推荐阅读