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

时间:2015-02-03 16:11:14

标签: postgresql intervals postgresql-8.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

如何使用较大的负间隔?

2 个答案:

答案 0 :(得分:2)

根据文档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)

答案 1 :(得分:0)

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

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