【问题标题】:Add Sum() in query (oracle)在查询中添加 Sum() (oracle)
【发布时间】:2020-10-12 09:07:21
【问题描述】:

我有一个工作请求:

SELECT Drivers.Surname, Drivers.Name, Waybills.StartTime,
       TO_CHAR(TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')+(FinishTime - StartTime),'hh24:mi:ss') AS run_time
FROM Waybills JOIN
     Drivers
     ON Drivers.Id = Waybills.DriverId
WHERE Waybills.StartTime > SYSDATE-7 ORDER BY Name ASC;

但是我不能在这个地方添加总和 sum(TO_CHAR(TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')+(FinishTime - StartTime ),'hh24:mi:ss')) AS run_time

【问题讨论】:

标签: sql oracle


【解决方案1】:

我认为你想对差值求和,然后添加到日期并转换为字符串:

TO_CHAR(date '1970-01-01' + sum(FinishTime - StartTime), 'hh24:mi:ss')

根据您的评论,您的列是timestamps 而不是dates。您只是在寻找第二个精度,所以您不妨只转换为日期:

TO_CHAR(date '1970-01-01' + sum(cast(FinishTime as date) - cast(StartTime as dte)), 'hh24:mi:ss')

【讨论】:

  • 我收到一个错误 ORA-00932:不一致的数据类型:预期的 NUMBER 得到 INTERVAL DAY TO SECOND
  • @Allmood 。 . .这表明您的列是 timestamps 而不是 dates。对于第二精度,您不妨只转换为日期。
  • 我又得到一个错误(( ORA-00937: not a single-group group function
  • @Allmood 。 . .这解决了您提出的问题,即如何将差异的总和相加。您问题中的查询显然需要group by,否则它在语法上不正确。
【解决方案2】:

您正在将 date 转换为 char 并添加 timestamp 的差异,这是错误的。

你必须这样做:

DATE'1970-01-01' +(cast(FinishTime as date) - cast(StartTime as date)) AS run_time

【讨论】:

    【解决方案3】:

    您可以尝试以下解决方法:

    trunc( mod(mod(end_date - start_date,1)*24,1)*60 ) 作为分钟, mod(mod(mod(end_date - start_date,1)*24,1)*60,1)*60 秒

    剩下的你可以试试这些: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions230.htm#i1002084

    得到结果后,您可以轻松地将其包装成字符串格式 [with e.g. to_char(x, 'yyyy-mm-dd')]

    这里有更多例子:

    Calculate difference between 2 date / times in Oracle SQL

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多