Lutz Horn schrieb am 23.10.2018 um 11:38:
> I can of course make an explicit select for `ts` values that are
> "today":
> 
>     select ts, id
>       from t
>      where ts >= '2018-10-23T00:00:00'::timestamp
>        and ts <= '2018-10-23T23:59:59'::timestamp;
> 
> This uses an Bitmap Index Scan on `t_ts_id_idx`. Good.
> 
> But the where conditions depends on concrete values of "today" which
> will not return the intended result if I execute it tomorrow. I will
> have to change the where condition. Not good.
> 
> I am looking for a way to make the where condition independed of the
> date of execution. I can create a function
> 
>     create function is_today(timestamp) returns boolean as $$
>         select to_char(now(), 'YYYY-MM-DD') = to_char($1, 'YYYY-MM-DD');
>     $$ language sql;
> 
> that converts the timestamps to text. But using this function
> 
>     select * from t where is_today(ts);
> 
> will not benefit from the existing index. A Seq Scan on `t` will be
> used. Not good.
> 
> Is there a way to have both: be independed of the concrete value of
> "today" *and* use the index on the timestamp column?

I typically use:

  where ts >= date '2018-10-23'
    and ts < date '2018-10-23' + 1






Reply via email to