postgreSQL(time1 - time2)vs(-time2 + time1)

时间:2015-05-12 16:58:11

标签: postgresql time operations

所以我正在为机场建立一个数据库,我想找到飞行的持续时间。有一个名为flight的表具有id ... dep_time (出发时间), arr_time (到达时间)声明为没有时区的时间

问题是其中一班航班于23:00:00起飞,并于第二天02:00:00 抵达

所以一般来说我使用的是 arr_time - dep_time ,但是这给了我特定航班的负面结果(-21:00:00)。

所以我想要的是,我偶然使用了 - dep_time + arr_time 并得到了正确的结果(03:00:00)......有人可以解释一下吗?我很困惑

(我不想要解决方案,因为我得到了它,我想要一个解释。另外我必须使用时间而不是时间变量,因为它在项目中指定)

编辑#1:伙计们我不想解决这个问题,我已经解决了。我想知道为什么结果存在差异,而不应该存在。

1 个答案:

答案 0 :(得分:0)

类型class SatInt: def __init__(self, low, up): self.lower = low self.upper = up self.value = 0 def add(self, n): if n+self.value > self.upper: self.value = self.upper else: self.value = self.value + n x = SatInt(0,100) x.add(32718) print(x.value) 的基线是一天。内部 - 它是从0:0:0开始的秒数。它只适用于两个值都是一天的情况。但是当这些值来自不同的日期时,您可以获得负值,因为此类型的溢出超过最大值(24小时 - 这是这两个基线之间的差异)。这个错误可以通过24小时添加来修复:

time

同样的情况可能是一周,几个月的日期。您可以按更高的顺序(或绝对值)计算,或者必须在基线中固定距离。

所以db2=# select '02:00:00'::time - '23:00:00'; ┌───────────┐ │ ?column? │ ╞═══════════╡ │ -21:00:00 │ └───────────┘ (1 row) db2=# select '02:00:00'::time - '23:00:00' + '24hours'; ┌──────────┐ │ ?column? │ ╞══════════╡ │ 03:00:00 │ └──────────┘ (1 row) ,但tue - mon = 1 .. (2 - 1)这几天是在不同的几周,所以你必须修复它Sun - Sat = -6 .. (0 - 6)