2014-09-15 2 views
1

Я пытаюсь выполнить следующую инструкцию SQL для базы данных Oracle:ОШИБКА ORA-00932: несовместимые типы данных: ожидается DATE получил ЧИСЛО

UPDATE PARENT 
SET RENEW_DATE = TO_DATE('08/31/' + EXTRACT(YEAR FROM JOINED), 'MM/dd/yyyy') 
WHERE STATUS_IND = 'Active'; 

Я ожидаю, чтобы получить год часть из поля под названием Регистрация, который это дата, отформатированная как MM/dd/yyyy. Я хочу получить конечный результат или значение, которое я устанавливаю, например, как «8/31/2015».

Любая помощь приветствуется. Я попробовал несколько вещей.

+0

Какой тип данных 'JOINED'? –

+0

Извиняюсь, что я раньше делал ORA-00932, при этом я получаю ORA-01722: неверный номер – user3845574

+0

JOINED имеет тип DATE – user3845574

ответ

1

Используйте знак || вместо знака +, чтобы объединить дату вместе.

UPDATE PARENT 
    SET RENEW_DATE = TO_DATE('08/31/' || EXTRACT(YEAR FROM JOINED), 'MM/dd/yyyy') 
WHERE STATUS_IND = 'Active' 
+0

Это так благодарит! – user3845574

+2

"* конкатенация ** даты ***" не совсем корректна. Здесь вы объединяете * строки *, а не даты. ''08/31/'' является символьным литералом (он же «строка»), а число, возвращаемое «EXTRACT (YEAR FROM JOINED)», будет неявно преобразовано в строку из-за способа его использования. –

+0

Ahh Я вижу, так что, если мне нужно добавить 1 к году im, получающему здесь, или добавить 1 к году даты результата, я попробовал это 'code' UPDATE PARENT SET RENEW_DATE = DATEADD (YEAR, 1, TO_DATE ('08/31/'|| EXTRACT (YEAR FROM JOINED),' MM/dd/yyyy ')) WHERE STATUS_IND =' Active ''code' – user3845574

Смежные вопросы