Oracle SQL转换epoch时间为标准日期格式报错问题咨询
错误原因分析
- 你的SQL语句中引用了
CreationDate字段,但你明确说明table1表仅包含ID、EpochDate两个字段,引用不存在的字段会直接触发语法报错 - Oracle中转换Unix Epoch时间(以秒为单位,从1970-01-01 00:00:00 UTC开始计数)的标准逻辑是基于1970-01-01的基准日期做偏移计算,你原有的波斯历转换逻辑没有对应字段支撑,本身也不匹配Epoch转日期的需求
修复后的SQL方案
方案1:转换为标准公历日期时间
SELECT ID, EpochDate, TO_DATE('1970-01-01', 'YYYY-MM-DD') + EpochDate/86400 AS 标准公历日期时间 FROM table1;
说明:86400为一天的总秒数,直接用基准日期加秒数偏移即可得到正确的公历时间。
方案2:需要输出波斯历格式的日期时间
如果需求是最终展示为波斯历时间,在转换得到公历时间后再做日历转换即可:
SELECT ID, EpochDate, TO_CHAR(TO_DATE('1970-01-01', 'YYYY-MM-DD') + EpochDate/86400, 'YYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=PERSIAN') AS 波斯历日期时间 FROM table1;
测试数据验证结果
基于你提供的测试数据,运行上述SQL后可得到正确转换结果:
- ID=100,EpochDate=16811048:对应公历时间为
1970-07-14 15:04:08 - ID=101,EpochDate=16810904:对应公历时间为
1970-07-14 14:41:44 - ID=102,EpochDate=12924715:对应公历时间为
1970-05-30 15:31:55 - ID=103,EpochDate=15667117:对应公历时间为
1970-07-01 05:18:37
内容的提问来源于stack exchange,提问作者Sara Moradi
相关产品推荐
相关产品推荐

