изменение 0019 года на 2019 - PullRequest
1 голос
/ 28 мая 2020

У меня есть дата с 19 годом, но на самом деле получается 0019 вместо 2009. ORDER_DATE - это поле даты.

Итак, когда я делаю

select ORDER_DATE, TO_CHAR(ORDER_DATE,'YYYY/MM/DD') from table abc

, я получаю:

30-JUN-19   0019/06/30
30-APR-19   0019/04/30
31-DEC-21   2021/12/31
23-JAN-19   2019/01/23

Есть ли способ изменить год 0019 на 2019?

Я пробовал:

SELECT case when extract(year from ORDER_DATE) = 19 
    then add_months (ORDER_DATE,24000) 
    else ORDER_DATE 
end as fixed_date 
from abc

Но не уверен, что это лучший способ.

спасибо

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Можете попробовать.

select ORDER_DATE, REPLACE(TO_CHAR(ORDER_DATE,'YYYY/MM/DD'), '0019', '2019') from table abc
1 голос
/ 28 мая 2020

Похоже, ваши даты на 2019 год на самом деле неправильные. Вам следует действительно выяснить, что привело к попаданию этих неверных данных в вашу базу данных, и исправить это.

Ваш подход к изменению дат на лету в запросе подходит для 2019 года. Я бы посоветовал сделать еще один шаг и фактически исправить ваши данные, поэтому вам не нужно беспокоиться об этом позже (при условии, что вы нашли и устранили причину неверных значений). Вот общий подход c, который добавляет 2000 лет к любой дате до 100 года:

update mytable
set order_date = add_months(order_date, 12 * 2000)
where extract(year from mytable) < 100

Возможно, вы захотите адаптировать границу к вашей реальной проблеме.

0 голосов
/ 28 мая 2020

Для запроса с исправленными датами:

select order_date
     , case when to_number(to_char(order_date,'CC')) = 1
           then order_date + numtoyminterval(2000, 'YEAR')
           else order_date
       end as fixed_date 
from   demo;

Чтобы исправить данные:

update demo
set    order_date = order_date + numtoyminterval(2000, 'YEAR')
where  order_date < date '1000-01-01';

Это обрабатывает годы, отличные от 0019, а также сохраняет любой компонент времени.

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