使用 Oracle PL/SQL 减去时间
Subtract time using Oracle PL/SQL
我正在使用 BI Publisher 创建报告。现在,我想要的是在日期中减去 4 小时。比如我在oracle数据库中获取的日期如下,
2019-09-23T10:09:34.054+00:00
现在我希望它在报告中 return 使用 sql 是,
2019-09-23T06:09:34.054+00:00
我该怎么做?
谢谢!
使用INTERVAL
?
SELECT ts - INTERVAL '4' HOUR
FROM yourTable;
如果你的源数据实际上是文本,而不是真正的时间戳列,那么你可以使用TO_TIMESTAMP_TZ
先做一个转换:
SELECT
TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') AS ts_original,
TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') - INTERVAL '4' HOUR AS ts_offset
FROM yourTable;
你只需要减去一小部分时间。 4 小时前像这样:
select sysdate-1/6 from dual;
我正在使用 BI Publisher 创建报告。现在,我想要的是在日期中减去 4 小时。比如我在oracle数据库中获取的日期如下,
2019-09-23T10:09:34.054+00:00
现在我希望它在报告中 return 使用 sql 是,
2019-09-23T06:09:34.054+00:00
我该怎么做?
谢谢!
使用INTERVAL
?
SELECT ts - INTERVAL '4' HOUR
FROM yourTable;
如果你的源数据实际上是文本,而不是真正的时间戳列,那么你可以使用TO_TIMESTAMP_TZ
先做一个转换:
SELECT
TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') AS ts_original,
TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') - INTERVAL '4' HOUR AS ts_offset
FROM yourTable;
你只需要减去一小部分时间。 4 小时前像这样:
select sysdate-1/6 from dual;