Почему существует проблема с функцией ADD_MONTHS в Oracle SQL - PullRequest
0 голосов
/ 02 февраля 2019

Я использую онлайн-базу данных APEX Oracle DB для обучения, и у меня возникла проблема с одной из функций, которая заставляет меня чесать голову.

Я провел некоторое тестирование и смог заставить его работать длинным способом, но не укороченным синтаксисом.Использование сокращенного синтаксиса возвращает ошибку, которую я не могу понять.Любая помощь будет оценена.

То, что я пытался:

select add_months('2015/10/12', 4) from dual возвращает ошибку:

ORA-01846: not a valid day of the week

То, что я получил на работу:

select add_months(to_date('2015/10/12', 'yyyy/mm/dd'), 4) from dual

когда я использую формат add_months(to_date())

Я получаю правильный результат, Friday, 12 February, 2016

Если я использую add_months(arg1, arg2), он возвращает ошибку.

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Найти вас NLS_DATE_FORMAT с нижеуказанным SQL

SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';

Обычно, когда вы передаете дату в виде строки varchar2, этот формат используется для неявного преобразования даты.

Итак, вместодля работы с форматом даты по умолчанию, мы всегда должны использовать явное преобразование даты, используя TO_DATE()

0 голосов
/ 02 февраля 2019

Мне удалось выяснить это.Я запустил systimestamp, и это было то, что было возвращено:

Saturday, 02 February, 2019.

Затем я взял и подключил это к функции, с которой у меня были проблемы с

select add_months(systimestamp, 4) from dual, и он вернул правильный результат:

Sunday, 02 June, 2019 в зависимости от моей датыформатирование.

0 голосов
/ 02 февраля 2019

add_months ожидает date, но вы предоставляете VARCHAR без форматирования, которое вызывает непредвиденные ошибки.

В основном oracle не может неявно преобразовать данный формат в дату

enter image description here

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