3

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

如何处理更大的负区间?

4

2 回答 2

4

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

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)
于 2015-02-03T16:18:17.097 回答
0

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

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

于 2015-02-04T10:19:20.150 回答