2017-10-21 59 views
1

如果我有这种格式的日期:Sep-29-07 13:45:00 PDT如何将PDT转换为Oracle sql中的日期时间对象?

我该如何将它转换成Oracle 11g中的Date对象?我曾经尝试这样做:

SELECT TO_DATE(PublishDate, 'MON-DD-YY HH24:MI:SS') 
FROM Order; 

但我得到一个错误说:

ORA-01830:转换整个输入字符串

+0

你有任何其他时区的日期?如果不是,你打算今后支持他们吗? – GurV

+0

@GurwinderSingh不,我没有任何其他时区的。表中的每一行都具有该值作为public_date值。 – CapturedTree

回答

1

之前的日期格式的图片中结束。如果你只有一个时区的日期,您可以忽略使用的时区部分:

select to_date(PublishDate, 'MON-DD-YY HH24:MI:SS "PDT"') 
from Orders; 

如果您打算支持多个时区,则将其存储为timestamp with time zone格式。使用正确的时区缩写(PST代替PDT - See this)并转换字符串,使用to_timestamp_tz

select to_timestamp_tz(PublishDate, 'MON-DD-YY HH24:MI:SS TZR') 
from Orders; 

或者可能将它们转换为一个本地时区。 See this answer for that

+1

第二种解决方案不起作用。 –

1

您可以通过忽略时区:

SELECT TO_DATE(SUBSTR(PublishDate, 1, length(PublishDate) - 4), 'MON-DD-YY HH24:MI:SS') 

但是,如果要处理不同的时区,你需要存储的标准格式,像'America/Los_Angeles'

例如:

SELECT TO_TIMESTAMP_TZ(PublishDate, 'MON-DD-YY HH24:MI:SS TZR') 
from (select 'Sep-29-07 13:45:00 America/Los_Angeles' as PublishDate from dual) x; 

可以将此修改此与'PDT',但其本身是不能接受的。

相关问题