Oracle APEX中如何将MySQL时间戳转换为指定格式日期时间?
问题分析与解决方法
你的语句错误点
- 引号使用错误:Oracle中字符串(包括日期格式串)必须用单引号
'包裹,双引号"仅用于定义大小写敏感的对象名称(比如表名、列名),你的语句里用双引号会导致Oracle无法识别为字符串。 - 函数用法错误:
TO_DATE()是用来解析符合指定格式的日期字符串的,而你传入的是Unix秒级时间戳(从1970-01-01 00:00:00开始的秒数),这类数值不能直接用TO_DATE解析。
正确转换方法
Unix秒级时间戳的转换逻辑是:基于Oracle的起始基准日期DATE '1970-01-01',加上时间戳对应的天数(秒数除以86400,因为1天=86400秒),再用TO_CHAR()格式化为你需要的日期字符串。
示例SQL语句:
SELECT TO_CHAR(DATE '1970-01-01' + 1661596801/86400, 'DD/MM/YYYY - HH24:MI:SS') AS formatted_datetime FROM dual;
如果需要考虑时区(比如时间戳是UTC时间,需转换为本地时区),可以使用带时区的时间类型处理:
SELECT TO_CHAR( FROM_TZ(TIMESTAMP '1970-01-01 00:00:00', 'UTC') + INTERVAL '1' SECOND * 1661596801, 'DD/MM/YYYY - HH24:MI:SS' ) AS local_datetime FROM dual;
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

