Обновление с фильтром на отметке времени - PullRequest
0 голосов
/ 19 февраля 2020

После нескольких лет без активности sql oracle ... Я пытаюсь обновить код состояния по дате oracle SQL. дата в французском формате ДД / ММ / ГГГГ

Формат в столбце date_start - метка времени с этим форматом «18/10/2019 23:15:26», и мне нужен фильтр на дату -1 месяц. И работая с sqlplus ...

я думаю так:

UPDATE contexte_ihm 
SET set status_code =1000 status_name = (select FLUX_STATUS_NAME from flux_status_ref where FLUX_STATUS_CD=1000)
WHERE status_code=9999 
AND DATE_START = TO_TIMESTAMP( '31/01/2000 08-00-00', 'DD/MM/YYYY HH24-MI-SS' )

Я попробовал это:

SELECT * FROM contexte_ihm WHERE status_code =1000 AND DATE_START =to_date('19/12/2019','dd/mm/yyyy')
  2  ;

no rows selected

С <NOW()-30 NOW неверный идентификатор ...

Мне нужно обновить 95000 строк за месяц go до более старой даты ...

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Звучит так, будто вы хотите диапазон дат. Я думаю:

WHERE status_code = 9999 AND
      date_start < trunc(sysdate, 'MON') - interval '1 month' and
      date_start >= timestamp '2000-01-31 08:00:00';

Вы должны проверить предложение WHERE на SELECT, чтобы убедиться, что оно получает правильные строки.

0 голосов
/ 20 февраля 2020

Я пытался, но что-то не так:

SQL> SELECT date_start, date_end FROM contexte_ihm
WHERE status_code = 9999 AND date_start < trunc(sysdate, 'MON') - interval '1 month' 
AND date_start >= timestamp '31/01/2000 08:00:00';

ORA-30089: <datetime field> missing or invalid

Я пытался использовать datetime с / separator, потому что это выглядит так:

DATE_START          DATE_END
------------------- -------------------
16/11/2019 15:04:54

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

SQL>desc contexte_ihm
 DATE_START  NOT NULL TIMESTAMP(6)
 DATE_END   TIMESTAMP(6)
 DATE_STATUS NOT NULL TIMESTAMP(6)
...