1

我有一个按顺序标记的字符字段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",

关于如何获得时间转换的任何想法?

4

1 回答 1

1

不需要这么复杂的表达式:

to_date(MOPID, 'MMDDYYHH24MISS')

DATE假设时间部分是 24 小时格式(00-23,而不是 00-12),会将列转换为实际列。如果您在 varchar 列中没有真正的有效日期,这也会失败。

这输出到我的 SQL 中的日期字段成这种格式

DATE没有“格式”!

该格式仅在您显示时应用。

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

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

在应用类似的东西之前,请允许我发表评论:

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

如果您从一开始就这样做了,那么您所要做的就是简单地将单个应用to_char()到您的DATE列中以获得您想要的显示格式。

于 2013-06-03T20:38:57.003 回答