обновить столбец даты оракула с другими значениями даты - PullRequest
2 голосов
/ 27 октября 2019

При обновлении старых дат до новых, я получаю

Ошибка SQL: ORA-00932 : несовместимые типы данных: ожидается, ДАТА получила CHAR 00932. 00000 - "несовместимые типы данных: ожидаемый% s получил% s "

UPDATE test
   SET date1 = 
   CASE date1
    WHEN '22-OCT-19' THEN '23-OCT-19'
    WHEN '21-OCT-19' THEN '22-OCT-19'
    WHEN '20-OCT-19' THEN '21-OCT-19'
    WHEN '17-OCT-19' THEN '18-OCT-19'
    WHEN '06-OCT-19' THEN '07-OCT-19'
    WHEN '05-OCT-19' THEN '06-OCT-19'
    WHEN '04-OCT-19' THEN '05-OCT-19'
    WHEN '03-OCT-19' THEN '04-OCT-19'
    WHEN '02-OCT-19' THEN '03-OCT-19'
    WHEN '29-SEP-19' THEN '30-SEP-19'
    WHEN '27-SEP-19' THEN '28-SEP-19'
   END;

Ответы [ 3 ]

3 голосов
/ 27 октября 2019

Как следует из сообщения об ошибке, вы смешиваете даты и варианты.

Ваш текущий запрос обновит все другие даты, не включенные в CASE, до NULL. Вам лучше использовать WHERE-условие с литералами даты, а затем просто добавить 1 день:

UPDATE test
SET date1 = date1 + 1
WHERE DATE1 IN
 ( DATE '2019-10-22'
  ,DATE '2019-10-21'
  ,DATE '2019-10-20'
  , etc.
 )
0 голосов
/ 27 октября 2019

Это будет работать:

update test 
set date1 = 
(
    case date1
       when to_date('22-OCT-19', 'dd-mon-yyyy') THEN to_date('23-OCT-19', 'dd-mon-yyyy')
       else date1
    end
);

Вот это DEMO

0 голосов
/ 27 октября 2019

Устраняет ли проблема формулировку логики с использованием явных литералов DATE?

UPDATE test
    SET date1 = (CASE date1
                     WHEN DATE '2019-10-22' THEN DATE '2019-10-23'
                     WHEN DATE '2019-10-21' THEN DATE '2019-10-22'
                     . . .
                 END);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...