You cannot cast +/- infinity timestamp to date

Thank you.

All my dates are in nearest centuries. So I fixed this by creating function

CREATE OR REPLACE FUNCTION public.doverlaps(date,date, date, date, out bool) immutable AS
$_$
SELECT coalesce($1, date '0001-01-01') <=coalesce($4, date '9999-12-31') AND
    coalesce($2, date '9999-12-31')>=coalesce($3, date '0001-01-01' );
$_$ language sql;


is this best solution ?

, but you can cast date to timestamp.
And what's wrong with OVERLAPS? e.g. :

CREATE OR REPLACE FUNCTION
PUBLIC.DOVERLAPS
(DATE, DATE, DATE, DATE, OUT BOOL)
IMMUTABLE AS
$_$
SELECT
(COALESCE($1::TIMESTAMP, TIMESTAMP '-INFINITY')
, COALESCE($2::TIMESTAMP, TIMESTAMP 'INFINITY')
)
OVERLAPS(
        COALESCE($3::TIMESTAMP, TIMESTAMP '-INFINITY')
        , COALESCE($4::TIMESTAMP, TIMESTAMP 'INFINITY'));
$_$ LANGUAGE SQL;

t=# SELECT doverlaps( NULL, NULL, NULL, NULL);
doverlaps
-----------
t

I'm using this for emplyment, vacation, illness etc. period calculation.
OVERLAPS produces invalid result in this case for DATE as discussed in other thread.

select doverlaps(date '2007-01-01',date '2007-01-02',date '2007-01-02',date '2007-01-04');

returns  FALSE

When first period end and second period start dates are the the same, doverlaps() must return TRUE.

Andrus.

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to