怎么把'2016-07-01 01:12:22 PM'转换成'2016-07-01 13:12:22'小时格式?

时间:2019-02-08 06:03:37

标签: sql oracle type-conversion timestamp

有人可以帮助我如何在PL / SQL中将2016-07-01 01:12:22 PM转换为2016-07-01 13:12:22吗?我用了以下内容,但没有运气。

SELECT TO_TIMESTAMP ('08-FEB-19 06.41.41.000000 PM', 'DD-Mon-RR HH24:MI:SS.FF') 
FROM dual

我希望:19年2月8日18.41.41.000000

我收到以下错误:

  

ORA-01830:日期格式图片在转换整个输入字符串之前结束

1 个答案:

答案 0 :(得分:5)

您当前的时间戳是没有意义的,因为它指定的时间为18小时,即下午6点,但同时它也指定了AM子午线指示符,这表示早于中午。因此,您可以从AM模式中删除TO_TIMESTAMP

SELECT TO_TIMESTAMP ('08-FEB-19 18.41.41.000000', 'DD-Mon-RR HH24.MI.SS.FF')
FROM dual;

08-FEB-19 06.41.41.000000000 PM

请注意,Oracle内部实际上没有12或24小时格式的时间戳记。相反,如果要查看24小时格式的Oracle时间戳,可以执行类似的操作,例如使用适当的24小时格式掩码调用TO_CHAR

SELECT
    TO_CHAR(TO_TIMESTAMP ('08-FEB-19 18.41.41.000000', 'DD-Mon-RR HH24.MI.SS.FF'),
        'DD-Mon-RR HH24.MI.SS.FF') AS ts
FROM dual;

08-Feb-19 18.41.41.000000000

Demo

编辑:

如果您要转换带有12小时时间和AM / PM组件的时间戳字符串,我们可以尝试:

SELECT
    TO_CHAR(
        TO_TIMESTAMP ('08-FEB-19 06.41.41.000000 PM', 'DD-Mon-RR HH.MI.SS.FF PM'),
        'DD-Mon-RR HH24.MI.SS.FF')
FROM dual;