Re: absolute value fro timestamps

Started by Claudio Lapidusover 22 years ago2 messagesgeneral
Jump to latest
#1Claudio Lapidus
clapidus@hotmail.com

Bruce Momjian wrote:

Why would you want an abolute value of a negative interval?

Because I'm trying to match pairs of records that satisfy certain criteria,
one of which is that both records have a timestamp that *may* be slightly
offset between them, so I substract the two and the result must be no
greater than the allowed offset. I don't know which record has the greater
timestamp, so I don't know the sign of the substraction in advance.

This works:

test=> select -(interval '-1');
?column?
----------
01:00:00
(1 row)

so I suppose you could create a function or CASE statement to get the
absolute value.

In the meantime I implemented it the following way:

\set maxoffset 4
select
...
where
abs(extract(epoch from age(m1.ts, m2.ts))) < :maxoffset
...

Which I think is more compact. Anyway, it would be nice to be able to write
directly

abs(age(m1.ts, m2.ts))

IMHO.

thanks
cl.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Claudio Lapidus (#1)

"Claudio Lapidus" <clapidus@hotmail.com> writes:

Bruce Momjian wrote:

Why would you want an abolute value of a negative interval?

Because I'm trying to match pairs of records that satisfy certain criteria,

Given that we have a unary-minus operator for intervals, I see no
conceptual objection to having an absolute-value operator (and \do shows
that interval is the only standard datatype that has the former but not
the latter).

However, given that it doesn't seem to be a really widely useful
operator, I think this is the kind of itch that you'll have to scratch
yourself. Send us a patch and it'll get into the next release ...

regards, tom lane