将0019年更改为2019年

xggvc2p6  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(340)

我的日期是19年,但实际上是0019年,而不是2009年。订单日期是一个日期字段。
所以当我这么做的时候

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

但不确定这是不是最好的办法。
谢谢

fdx2calv

fdx2calv1#

你可以试试。

select ORDER_DATE, REPLACE(TO_CHAR(ORDER_DATE,'YYYY/MM/DD'), '0019', '2019') from table abc
rqdpfwrv

rqdpfwrv2#

看来你2019年的约会是错的。您应该真正调查是什么导致这些坏数据进入您的数据库并加以修复。
您在查询中动态更改日期的方法适用于2019年。我建议您更进一步,实际修复您的数据,这样以后就不必担心了(假设您找到并修复了错误值的原因)。这是一种通用方法,在第100年之前的任何日期加上2000年:

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

您可能需要根据实际问题调整边界。

5fjcxozz

5fjcxozz3#

要查询更正日期:

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以外的年份,并保留任何时间组件。

相关问题