Как получить год и неделю по стандарту ISO 8601?

Есть код ниже, который выводит строку содержащую год/неделю 202153. Но нужно, чтобы вместо первой недели 2021 года, была последняя неделя 2020 года, то есть года ISO.

Есть ли встроенная функция для решения этой проблемы?

SELECT to_char(to_date('20210104', 'YYYYMMDD') - 3, 'YYYYIW') AS yearweek
FROM dual;

YEARWE
------
202153

Ожидаемый вывод: 202053.

Конечно, можно просто применить decode, но надеюсь, что есть более удачное решение.


Свободный перевод вопроса ISO Week 202153 от участника @jeiv


Полезный комментарий:
Может стоит использовать официальный формат согласно ISO-8601:

TO_CHAR(..., 'IYYY "W "IW')

, чтобы избежать двусмысленного формата YYYYMM - Wernfried Domscheit


Ответы (1 шт):

Автор решения: 0xdb

Надо использвоать маску формата IYYY (ISO год) вместо YYYY (календарный год):

select to_char (date'2021-01-04' - 3, 'IYYYIW') yearweek
from dual
/

YEARWEEK
--------
202053
→ Ссылка