ORA-01830: ограничение данных зависит от конкретного изменения во времени - PullRequest
0 голосов
/ 08 января 2019

Мне просто нужно показать ORD_DT после применения в течение 4 месяцев.

например. если APP_DT равен 2018/01/01, он будет отображать 4 строки, а ORD_DT - 2018/01/01, 2018/02/01, 2018/03/01 и 2018/04/01.

Я попробовал запрос ниже, но я получил неправильное сообщение "ORA-01830: изображение в формате даты заканчивается перед преобразованием всей входной строки".

Может ли кто-нибудь помочь? Спасибо.

select a.id, a.app_mon
, to_date(ORD_DT, 'YYYY-MM') as ORD_DT
, add_months(to_date(ORD_DT, 'YYYY-MM'),3) as IN_3_MONTHS
from CN_NEW_APPLICANT
where a.id = 'CN00300323' 
and h.dist_id = a.id
and to_date(ORD_DT, 'YYYY-MM') < to_date(add_months(a.app_mon,3),'YYYY/MM/DD');

Данные для вашей справки:

+------------+------------+------------+-------------+
|     ID     |   APP_DT   |   ORD_DT   | IN_3_MONTHS |
+------------+------------+------------+-------------+
| CN00300323 | 2018/01/01 | 2018/01/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/02/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/03/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/04/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/05/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/06/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/07/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/08/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/09/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/10/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/11/01 | 2018/04/01  |
| CN00300323 | 2018/01/01 | 2018/12/01 | 2018/04/01  |
+------------+------------+------------+-------------+

Примечание: APP_DT означает дату начала месяца, к которому присоединился один клиент, и его формат даты. ORD_DT - это месяц, когда один покупатель купил, и его формат - строка (ГГГГ-ММ). Но я показал данные в формате даты выше.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы не упомянули тип столбца a.app_mon, но в этом выражении есть хотя бы одно неявное преобразование типа to_date(add_months(a.app_mon,3),'YYYY/MM/DD');.

Если это тип date, вам просто нужно add_months(a.app_mon,3). Дополнительный to_date() вызывает результат add_months() (который уже имеет тип date), неявно преобразуемый в varchar2, что, скорее всего, не соответствует данной строке формата.

Если это тип varchar2, вам сначала нужно преобразовать его в date: add_months(to_date(a.app_mon, 'YYYY-MM-DD'), 3). Убедитесь, что строка формата соответствует фактическому тексту. В этом случае существует второе неявное преобразование из varchar2 в date, поскольку для add_months() требуется первый параметр типа date.

Edit:

Другая причина этой ошибки может заключаться в том, что значения в столбце ORD_DT содержат тексты, которые не соответствуют формату "ГГГГ-ММ".

0 голосов
/ 08 января 2019

to_date(add_months(a.app_mon,3),'YYYY/MM/DD'); утверждение неверно

сначала вам нужно конвертировать в дату, затем вам нужно использовать add_months

add_months(to_date(a.app_mon,'YYYY/MM/DD'),3);

PS: я не уверен в вашей логике, поэтому я не стал комментировать.

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