I have a query like this:
SELECT *
FROM mytable fact
JOIN time_table time ON ( time.time_5_min_utc = fact.event_5_min_utc )
WHERE fact.event_utc >= ${fromTimestamp}
AND fact.event_utc < ${toTimestamp}
AND time.time_5_min_utc >= ${fromTimestamp}
AND time.time_5_min_utc < ${toTimestamp}
I always know the fromTimestamp in UTC.
What I want to to now is add value to toTimestamp to get the end of the day.
Something like:
SELECT *
FROM mytable fact
JOIN time_table time ON ( time.time_5_min_utc = fact.event_5_min_utc )
WHERE fact.event_utc >= ${fromTimestamp}
AND fact.event_utc < ${toTimestamp} + 86400000
AND time.time_5_min_utc >= ${fromTimestamp}
AND time.time_5_min_utc < ${toTimestamp} + 86400000
This should add 86400000 to the toTimestamp but what I get is a +24h. It should be the end of current day 23:59:59.
How can I do that?
I found a way how to fix this problem and I wanted to share my solution.
Explanation:
First the 'toTimestamp is cast as decimal to be able to cast it as timestamp afterwards. When it is a timestamp it is possible to extract the day of it and then subtract 1 second to get the day before 23:59:59. Then it is converted back to a UTC timestamp with the correct timezone. At last it is converted back as number and multiplied with 1000 to get a UTC timestamp in milliseconds.