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
如何使用较大的负间隔?
答案 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的工作方式不同,因此在这种情况下混合这些类型并不是一个好主意。