【问题标题】:How to subtract 2 timestamp (one as a date, other in HH24:MI format) and get the result in HH24:MI format in OracleSQL如何减去 2 个时间戳(一个为日期,另一个为 HH24:MI 格式)并在 Oracle SQL 中获取 HH24:MI 格式的结果
【发布时间】:2021-06-03 02:27:17
【问题描述】:

我有一个包含两列的表,Start_time 和 SLA。

开始时间每天更新,并采用日期格式,例如 01-Jun-2021 19:15:38

SLA 列将 HH24MI 固定为 2010

我希望 1915 - 2010 为 -00:55(如 HH24MI 格式)

SELECT TO_CHAR((TO_CHAR(START_TIME,'HH24')||TO_CHAR(START_TIME,'MI'))-2010,'0000') 
FROM DUAL;

上面将给出结果为 -0095 但我希望它是 -00:55

【问题讨论】:

  • @garymyers - 我看了几次你链接到的线程,但我看不到任何地方他们展示了如何以每小时到分钟的间隔呈现结果(尤其是可能是负数)。愿意启发我们吗?
  • 这是一个使用 TIMESTAMP,因为 TIMESTAMP 数学返回 INTERVAL,您使用 EXTRACT 从 INTERVAL 中获取组件。在链接的问题中解释得很好,但有人删除了该链接并且对讨论没有任何贡献

标签: sql oracle


【解决方案1】:

start_time 存储为DATE 数据类型,将sla 存储为INTERVAL DAY TO SECOND 数据类型:

CREATE TABLE table_name (
  start_time DATE,
  sla        INTERVAL DAY TO SECOND
);

那么您的数据将是:

INSERT INTO table_name ( start_time, sla ) VALUES (
  TO_DATE('01-Jun-2021 19:15:38', 'DD-MON-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American'),
  INTERVAL '20:10:00' HOUR TO SECOND
);

而且,要找出差异,您可以使用:

SELECT start_time,
       sla,
       (start_time - TRUNC(start_time)) DAY TO SECOND - sla AS difference
FROM   table_name

哪些输出:

START_TIME SLA DIFFERENCE
2021-06-01 19:15:38 +00 20:10:00.000000 -000000000 00:54:22.000000000

如果您希望输出为格式化字符串,而不是间隔,则:

SELECT start_time,
       sla,
       CASE WHEN difference < INTERVAL '0' HOUR THEN '-' END
       || TO_CHAR( ABS( EXTRACT( HOUR FROM difference ) ), 'FM00' )
       || TO_CHAR( ABS( EXTRACT( MINUTE FROM difference ) ), 'FM00' )
         AS difference
FROM   (
  SELECT start_time,
         sla,
         (start_time - TRUNC(start_time)) DAY TO SECOND - sla AS difference
  FROM   table_name
)

哪些输出:

START_TIME SLA DIFFERENCE
2021-06-01 19:15:38 +00 20:10:00.000000 -0054

db小提琴here

【讨论】:

  • 很好地用于间隔。您甚至可以将结果添加为虚拟列,即target_completion generated always as (start_time + sla)
猜你喜欢
  • 1970-01-01
  • 2016-05-23
  • 2016-03-23
  • 2015-08-24
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多