Postgresql 8.3 不理解大于一天的负间隔

Postgresql 8.3 doesn't understand negative interval greater than a day

Postgresql 8.3 可以理解以下语句:

SELECT '1.12:00:00'::interval
SELECT '12:00:00'::interval
SELECT '-12:00:00'::interval

但是下面的语句没看懂:

SELECT '-1.12:00:00'::interval

我收到以下错误:

ERROR:  invalid input syntax for type interval: "-1.00:02:00"

********** Error **********

ERROR: invalid input syntax for type interval: "-1.00:02:00"
SQL state: 22007

如何处理更大的负区间?

根据文档 for intervals,我认为正确的表示法是:

SELECT '-1 -12:00:00'::interval;  -- Assuming you want an interval equivalent to -36 hours

postgres=# select '-36 hours'::interval = '-1 -12:00:00'::interval;
 ?column? 
----------
 t
(1 row)

顺便说一下,您的 1.12:00:00 符号可能没有达到预期效果 - 我的解释是您试图表示 36 小时(1 天 + 12 小时) - 由于相同符号问题。

postgres=# select
postgres-#   '1.12:00:00'::interval = '36 hours'::interval,
postgres-#   '1 12:00:00'::interval = '36 hours'::interval;
 ?column? | ?column? 
----------+----------
 f        | t
(1 row)

根据对我的问题的反应和我自己的调查,问题原来是两种类型的混合使用:.NET 的 TimeSpan 和 NpgsqlTypes.NpgsqlInterval。我已将所有内容更改为 NpgsqlInterval,这解决了我的问题。

由于省略了 TimeSpan 类型的使用,我现在可以使用更大的间隔负值。当间隔大于一天(负数)时,TimeSpan 和 Interval 的工作方式不同,因此在这种情况下混合使用这些类型不是一个好主意。