如果我有这种格式的日期: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:转换整个输入字符串
如果我有这种格式的日期: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:转换整个输入字符串
之前的日期格式的图片中结束。如果你只有一个时区的日期,您可以忽略使用的时区部分:
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
第二种解决方案不起作用。 –
您可以通过忽略时区:
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'
,但其本身是不能接受的。
你有任何其他时区的日期?如果不是,你打算今后支持他们吗? – GurV
@GurwinderSingh不,我没有任何其他时区的。表中的每一行都具有该值作为public_date值。 – CapturedTree