Oracle 甲骨文:ISO周,回答错误

Oracle 甲骨文:ISO周,回答错误,oracle,date,Oracle,Date,在Oracle 11和Oracle 12中,发出以下select命令: SELECT TO_CHAR((TO_DATE('19720101','YYYYMMDD')), 'YYYYIW') || ' ' || TO_CHAR((TO_DATE('19721230','YYYYMMDD')), 'YYYYIW') AS ERRATO FROM DUAL; 我得到: 197252 197252 我期望的是: 197152 197252 or 197153 197252 为什么我会得到相同的结果

在Oracle 11和Oracle 12中,发出以下select命令:

SELECT TO_CHAR((TO_DATE('19720101','YYYYMMDD')), 'YYYYIW') || ' ' || TO_CHAR((TO_DATE('19721230','YYYYMMDD')), 'YYYYIW') AS ERRATO FROM DUAL;
我得到:

197252 197252
我期望的是:

197152 197252 or 197153 197252

为什么我会得到相同的结果197252 197252?

您当前正在使用
'yyyyw'
进行格式化,这是一个4位数的年份,后跟一年中的ISO周。我猜你想要的是ISO年周,然后是ISO年周

关于这一点,您还不清楚,但是您应该尝试将
'iyyiw'
作为格式字符串。使用“基于ISO标准的4位数年份”(
iyy


(我试图在sqlfiddle上运行它,看看它是否有效,但它目前处于挂起状态…

我刚刚意识到,你完全正确。选择TO CHAR((TO_DATE('19720101','YYYYMMDD')),'iyyyyiw')| | | | | | TO_CHAR('TO_DATE('19721230','yyyyymmdd'),'iyyyyyyiw')作为双精度的勘误表;结果:197152197252谢谢!你应该读一读——这更清楚:“ISO 8601标准定义的包含日历周的4位数年份”@a_horse_,带_no_名称:谢谢。这至少有点清楚,但我发现谈论“日历年”和“周年”更清楚。(“日历周”本身是一个奇怪的术语,依我看。)“日历周”在人们习惯于每周工作的领域中非常常见。例如,在德语中,你说“Kalenderwoche”或仅仅是“KW”,而且用法很常见(与美国不同)。如果你想知道属于iso周的年份,你需要使用
iyy
而不是
yyy