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

问题描述 投票:1回答:1

我正在使用此查询

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

oracle date
1个回答
4
投票

时间格式是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),请在at time zone上使用TIMESTAMP WITH 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;

更多信息请访问:


由于您希望以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;
© www.soinside.com 2019 - 2024. All rights reserved.