甲骨文 to_timestamp

Oracle to_timestamp

关于 Oracle To_timestamp 的快速问题 To_timestamp。

我在 table 中有两个字段都是 varchars

1 个字段包含 YYYYMMDD 格式的值 第二个字段包含 hh24mmss 格式的值

我正在尝试将这两个字段转换为时间戳字段,

预期输出是 DD/MM/YYYY HH24:mm:ss 比如“2015 年 7 月 23 日 12:53:04”

然而,它给了我奇怪的结果...... 像'7/15/0023 12:53:04'

好像年变成日,日变成年..

------------这是我的sql----------------

select 


  to_date(to_char(to_date('20150723','yyyymmdd'),'yyyymmdd'),'yyyymmdd') dt,
  to_char(to_date(SUBSTR('005304000',1,6), 'hh24miss'), 'hh24:mi:ss') tm,

 TO_TIMESTAMP(
 to_date(to_char(to_date('20150723','yyyymmdd'),'yyyymmdd'),'yyyymmdd')  ||  
 to_char(to_date(SUBSTR('005304000',1,6), 'hh24miss'), 'hh24:mi:ss'), 'yyyy/mm/dd HH24:MI:SS'  ) dttm

  from dual

您的转化链中有一层至多。如果在转换之前将两列连接起来会容易得多:

to_date(date_column||time_column, 'YYYYMMDDHH24MISS')

将 return 日期和时间(Oracle DATE 包括时间部分)。

现在您已经有了合适的日期值,接下来您可以根据需要设置格式:

to_char(to_date(date_column||time_column, 'YYYYMMDDHH24MISS'), 'yyyy/mm/dd HH24:MI:SS')

由于您的 "time" 列不包含毫秒,因此使用 to_timestamp 并没有真正的好处。


但是您应该真正修复您的 table,并将该信息存储在单个 DATE(或 TIMESTAMP)列中。在 varchar 列中存储日期始终是一个非常糟糕的选择。