Oracle SQL - Почему выбирается to_char (to_date ('31 -DEC-18 '),' YYYY-IW ') из двойного;вернуть 2018-01? - PullRequest
0 голосов
/ 07 июня 2019

При использовании Oracle SQL, почему оператор выбора

select to_char(to_date('31-DEC-18'), 'YYYY-IW') 
from dual;

возврат '2018-01'?

Я понимаю, что «IW» использует стандарт ISO, который я и хочу использовать, но, насколько я могу судить из своего исследования, 31 декабря 2018 года происходит в течение первой недели 2019 года, в соответствии со стандартом ISO. Итак, я понимаю, почему оператор select возвращает «01» для «IW», но почему он возвращает «2018» для «YYYY»? Разве заявление не должно возвращать '2019-01'?

Для данных, которые я использую, предпочтительно использовать IW вместо WW.

Ответы [ 2 ]

6 голосов
/ 07 июня 2019

Вам может понадобиться формат года ISO IYYY, согласно Документация Oracle :

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 голос
/ 07 июня 2019

ИСО год 2019 начался 31 декабря 2018 года. Все недели начинаются с понедельника и по правилу, то есть с первой недели 2019 года. Oracle правильно выполняет вычисления. Есть удобные ссылки онлайн для дат ISO.

Возможно, вы захотите пересмотреть правила для недель и лет ISO, например, в Wikipedia .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...