On Wed, May 1, 2019 at 7:37 PM Chuck Martin <clmar...@theombudsman.com> wrote:
>
> Something like daterange would be a solution in some circumstances, but this 
> query is a user-generated one, and they don't have that much control over the 
> query. It has to be modified as needed behind the scenes so that it produces 
> the results they expect. In this instance, I'm now (given the advice received 
> here) inclined to check the value entered when searching for a date, and if 
> no time is entered, add '24:00' to the date.

What I normally do for that is, if the user must enter a date, use
$user_input::date+1 and always go to less than.

But anyway your solution with <= is incorrect. And you have made the
mistake probably because the 24:00 lead you to think postgres will
split the timestamp, compare
the date with may 1 and the time with 24:00, and that is not true. The
less-than option plus one-day add will not lead you to that error.

You can use <= with 23:59:59.9999999999999999999, will be good for
some years if leap-seconds do not bite you.

The problem is when the user enters a date, he wants a date search, so
cast(dateTime as date) <= limit. When he enters a time he does not
usually know what he is asking for ( normally when my users ask for
'May 1 23:15 they want to include up to 23:15:59, users think in
"truncate to my precision, then search inclusively" ). But they begin
to understand it when I ask "ok, twice a month bills, go 1..15 and
16..what ?", much easier to say [YYYY-MM-01 , YYYY-MM-16) and [
YYYY-MM-16, (YYYY-MM-01)+1month)

Francisco Olarte.


Reply via email to