On 2015-07-29 06:34 PM, jose isaias cabrera wrote:
> Greetings!
>
> I am trying to calculate a date using sqlite date and time functions.
> Perhaps, one of you GURUs can help this poor soul. I have been trying to
> figure it out, but I know I am lack the understanding. I read the
> documentation for it,
>
> https://www.sqlite.org/lang_datefunc.html
>
> but I can not seem to find the way to do this. The idea is this one, there
> will be an input of hours, which in this case will be 5.5 hours, that will be
> added to the actual time. For example, if it's 10AM, adding 5.5 hours will
> give 3:30 PM. This is easy,
>
> datetime('now','localtime','+5.5 hours')
>
> the problem happens if it is after 5PM. For example, say it is 2PM, adding
> 5.5 hours to it will give 7:30PM. What I am trying to do is to add the
> amount of hours over 5PM, which is,
>
> time('now','localtime','+5.5 hours') - '17:00:00'
>
> to 8.5 hours to the start of the next day and select that date and time.
Finally, an interesting question :)
It's easy to do, but you need to think of time in days:
WITH DTVals( EndOfToday, NewTimeToday, NewTimeTomorrow ) AS (
SELECT
datetime( 'now', 'localtime', 'start of day', '+17 hours' ),
// End of Today
datetime( 'now', 'localtime', '+5.5 hours' ),
// New time if today
datetime( 'now', 'localtime', 'start of day', '+1 day', '+8.5
hours', '+5.5 hours' ) // New time if tomorrow
)
SELECT
CASE WHEN NewTimeToday <= EndOfToday THEN NewTimeToday ELSE
NewTimeTomorrow END
FROM DTVals;
The whole CTE isn't necessary, it's just to show more clear what is
happening. Once you understand why the above works, the calculation can
be optimized a lot and made faster.
(All those spaces are just for clarity, they may be omitted)
Cheers,
Ryan
> So, I thought that if I concatenate the result to the with to '+XXX hours'
> it would work. But, you all probably know the result. So, here is what I
> have tried last:
>
> select CASE
> WHEN time('now','localtime','+5.5 hours') > '17:00:00' THEN
> datetime('now','localtime','+1 day','start of day','+8.5 hours','+' ||
> time('now','localtime','+5.5 hours') - '17:00:00' || ' hours')
> ELSE
> datetime('now','localtime','+5.5 hours')
> END;
>
> but I get nothing for result:
>
> sqlite> select CASE
> ...> WHEN time('now','localtime','+5.5 hours') > '17:00:00' THEN
> ...> datetime('now','start of day','+1 day','+8.5 hours','+' ||
> time('now
> ','+5.5 hours','localtime') - '17:00:00' || ' hours')
> ...> else
> ...> datetime('now','localtime','+5.5 hours')
> ...> END;
>
>
> sqlite>
>
> Any help would be greatly appreciated. Thanks.
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users