sqlalchemy: 将timedelta列除以浮点数得到奇怪的结果

0 投票
1 回答
589 浏览
提问于 2025-04-18 10:50

我正在尝试在查询中对某一列进行一些操作。我想把一个时间差(timedelta)列除以60。不过,结果有点奇怪。

在我的查询中,我返回了两个时间点、这两个时间点之间的时间差,以及这两个时间点之间的时间差除以2。下面是输出的一个例子:

(datetime.datetime(2013, 1, 1, 0, 0, 8), 
datetime.datetime(2013, 1, 1, 0, 7, 32), 
datetime.timedelta(0, 444), 
Decimal('362.0000'))

但是,时间差444除以2并不等于362.0000。这就是sqlalchemy给我的结果。有没有办法得到正确的结果呢?

在查询中进行这种操作很重要,因为我还想把上面的结果作为子查询,并对结果进行平均,但我得到的平均值也很奇怪。

这是我的查询:

    sub = session.query( 
                        merge.c.time_received,
                        merge.c.time_sent,
                        func.timediff(
                            merge.c.time_sent,
                            merge.c.time_received
                        ),
                        func.timediff(
                            merge.c.time_sent,
                            merge.c.time_received
                        ) / 2.0
                    ). \
                    filter(
                        merge.c.time_received != None,
                        merge.c.time_sent != None,
                    ). \
                    limit(1)

1 个回答

0

我不太确定当你把TIME类型的数据除以一个数字时会发生什么。不过,也许先用TIME_TO_SEC(time)把它转换成,这样就能解决问题了。

我假设这里使用的是mysql。

撰写回答