我想在 Oracle 中将此日期格式 1970-01-01T00:00:00-08:00 转换为仅 dd/mm/yyyy。但是通过使用以下查询,我在转换中遇到错误



我正在使用此查询

SELECT CAST(TO_TIMESTAMP_TZ(REPLACE('1970-01-01T00:00:00-08:00', 'T', ''), 
                                    'YYYY-MM-DD HH:MI:SS TZH:TZM') AS DATE) DOB FROM dual;

输出是

ORA -01849:小时必须在1到12 01849. 00000 - "必须为 1至12"

之间

我仅需要输出为MM/DD/YYYY

时间格式为24小时,因此修复是使用HH24而不是HH

SELECT CAST(TO_TIMESTAMP_TZ(
    REPLACE('1970-01-01T00:00:00-08:00', 'T', ''),
    'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS DATE) DOB 
FROM dual;

但是,您可以在模式下使用文字"T",而不是使用替换:

SELECT CAST(
    TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00', 
        'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM') 
    AS DATE) DOB FROM dual;

被告知,演员阵容只是删除时区信息。如果您需要在特定时区(例如 04:00)将时间戳转换为迄今为止的时间戳,请在TIMESTAMP WITH TIME ZONE上使用at time zone子句:

SELECT CAST(
    TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00', 
        'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM') 
    at time zone '+04:00' AS DATE) DOB FROM dual;

请参阅更多信息:

  • Oracle用TimeZone转换为日期的时间戳

由于您希望以格式MM/DD/YYYY输出,因此直接在时间戳上使用to_char:

SELECT to_char(
    TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00', 
        'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM') 
    at time zone '+04:00', 'MM/DD/YYYY') DOB FROM dual;

最新更新