0

在我的查询中,我想取两个日期的差值。

(SELECT
        (SELECT estimated_arrival AS val2
        FROM shipment_stop
        WHERE stop_num =5
        AND shipment_gid ='IFFCO/LOGISTICS.LG171009102'
        ) -
        (SELECT estimated_arrival AS val1
        FROM shipment_stop
        WHERE stop_num   = 1
        AND shipment_gid = 'IFFCO/LOGISTICS.LG171009102'
        )
        FROM dual
        )

所以基本上假设 Val1 是 2017 年 10 月 10 日,而 Val2 是 2017 年 10 月 13 日,所以如果我在做 Val2 - Val1 那么它应该显示 3 天,但它显示为 3.237856747474747474,看起来它也在使用时间。有没有办法处理这个?注意:Estimated_arrival 是日期列

4

2 回答 2

1

除了用于trunc()将 DATE 列的时间部分设置为午夜 (00:00:00) 的建议之外,您不需要使用两个 select 语句来计算差异。

例如,假设 shipping_gid 和 stop_num 是唯一的,您可以执行以下操作:

SELECT MAX(CASE WHEN stop_num = 5 THEN TRUNC(estimated_arrival) END)
         - MAX(CASE WHEN stop_num = 1 THEN TRUNC(estimated_arrival) END) date_difference
FROM   shipment_stop
WHERE  stop_num IN (1, 5)
AND    shipment_gid = 'IFFCO/LOGISTICS.LG171009102';
于 2018-06-26T14:07:03.330 回答
1

你想用来删除时间组件。目前尚不清楚您是要在减法之前还是之后执行此操作。基本上,您认为一天的上午 11:00 是从第二天上午 10:00 开始的 0 天还是 1 天?

在这种情况下,我猜你想要 1 天。如果是这样,请在减去trunc() 之前使用:

SELECT ( (SELECT trunc(estimated_arrival) AS val2
          FROM shipment_stop
          WHERE stop_num = 5 AND shipment_gid = 'IFFCO/LOGISTICS.LG171009102'
         ) -
         (SELECT trunc(estimated_arrival) AS val1
          FROM shipment_stop
          WHERE stop_num   = 1 AND shipment_gid = 'IFFCO/LOGISTICS.LG171009102'
         )
       ) as diff_days
FROM dual;
于 2018-06-26T13:36:34.057 回答