使用无痛脚本在Elastic 6.7中计算两个日期持续时间

时间:2019-04-02 14:42:49

标签: elasticsearch kibana-5 elasticsearch-painless

我使用下面的简单表达式获取持续时间:

doc['endTime'].date.millisOfDay - doc['startTime'].date.millisOfDay

但是问题开始于endTime超过startTime日。

  

示例:如果startTime为23:50,而endTime相同为00:12,则我们   午夜过去,这也会更改日期。

那样的话,我得到的时间绝对是错误的,除了所有两个时间都在同一天的情况都是预期的。

帮助我确定如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您应该简单地减去自历元以来的绝对毫秒值(而不是自一天开始以来的毫秒数):

SELECT P.PRODUCT_ID,
       P.PRODUCT_NAME,
       CONCAT(DATENAME(MONTH, @startdate), '''', RIGHT(DATENAME(YEAR, @startdate), 2)) AS StardPeriod,
       CONCAT(DATENAME(MONTH, @enddate), '''', RIGHT(DATENAME(YEAR, @enddate), 2)) AS EndPeriod
FROM [Products$] P INNER JOIN
     [InvDetails$] ID
     ON ID.PRODUCT_ID = P.PRODUCT_ID INNER JOIN
     [Invoices$] I
     ON I.INVOICE_ID = ID.INVOICE_ID
WHERE I.INVOICE_DATE BETWEEN @startdate AND @enddate;