日期在Oracle中无法正确显示

时间:2013-06-03 20:30:30

标签: sql oracle10g

我有一个字符字段,按MMDDYYHHMMSS的顺序标记(注意:不是日期而是字符字段)。我希望将我的SQL中的日期字段转换为此格式dd.mm.yyyy. hh24:mi

我的问题是sql没有时间就把它踢到了YYYY-MM-DD字段。这部分sql看起来像这样:

TO_DATE(SUBSTR(MOPACTIVITY.MOPID,3,2)||'.'||SUBSTR(MOPACTIVITY.MOPID,1,2)
        ||'.'||'20'||SUBSTR(MOPACTIVITY.MOPID,5,2)||'.'||SUBSTR(MOPACTIVITY.MOPID,7,2)
        ||':'||SUBSTR(MOPACTIVITY.MOPID,9,2)||':'||SUBSTR(MOPACTIVITY.MOPID,11,2)
       , 'dd.mm.yyyy. hh24:mi:ss') "XXX",

关于如何获得转换时间的任何问题?

1 个答案:

答案 0 :(得分:1)

不需要这么复杂的表达:

to_date(MOPID, 'MMDDYYHH24MISS')
假设时间部分为24小时格式(00-23,而不是00-12),

会将列转换为实际DATE列。如果您在varchar列中没有真正的有效日期,这也将失败。

  

将我的SQL中的日期字段改为此格式

DATE具有“格式”!

格式仅在您显示时应用。

如果您的意思是要将存储在列中的varchar转换为另一个具有不同日期格式的varchar,最简单的方法可能就是将上面的表达式转换回varchar:

to_char(to_date(MOPID, 'MMDDYYHH24MISS'), 'dd.mm.yyyy. hh24:mi')

在申请之前,请允许我发表一条评论:

将日期存储在DATE列中,永远不要将它们存储在VARCHAR列中。

如果您从一开始就这样做了,那么您只需要在to_char()列中应用一个DATE即可获得所需的显示格式。