PLSQL:改变年份的前两位数

时间:2012-08-13 20:32:22

标签: sql plsql

日期列中的某些日期的年份不正确。如何更改年份的前两位数?

例如:

select 
ID,
to_char(END_DT,'yyyy-mm-dd hh:mi:ss') as dt
From DB

会导致:

ID   dt
1    0207-08-10 12:00:00
2    0208-03-31 12:00:00
3    0200-11-10 12:00:00

我希望结果如下:

ID   dt
1    2007-08-10 12:00:00
2    2008-03-31 12:00:00
3    2000-11-10 12:00:00

2 个答案:

答案 0 :(得分:0)

如果您只想“获得”正确的日期,可以使用类似

的内容
select 
  substr(to_char(END_DT,'yyyy'),2,1) ||
  substr(to_char(END_DT,'yyyy'),1,1) || 
  substr(to_char(END_DT,'yyyy'),3,2) ||'-'||
  to_char(END_DT,'mm-dd hh:mi:ss')
  as dt
From DB;

答案 1 :(得分:0)

如果这是一致的格式问题,则以下逻辑应该撤消问题:

select (case when left(to_char(END_DT, 'yyyy'), 2) = '02'
             then '20'||substr(to_char(END_DT,'yyyy-mm-dd hh:mi:ss'), 3, 100)
             else to_char(END_DT,'yyyy-mm-dd hh:mi:ss')
        end) as BetterFormat

这假设问题是前两位数字是相反的,并且这在2000年之前没有发生。

但是,我必须强调,数据库中的数据不正确。正确的做法是修复数据库中的数据。掩盖这个问题可能会使中期变得更糟。