#postgresql
#postgresql
Вопрос:
У меня есть таблица, time_slots
, в которой есть столбец start_time
. В моей users
таблице есть столбец hours_before
(int), который представляет собой количество часов start_time
до получения уведомления.
Я запускаю задание каждые 5 минут, которое проверяет временные интервалы, которые имеют значение a start_time
, которое сейчас равно hours_before
. Все мои даты и время хранятся в UTC. Я не могу найти правильное where
предложение, чтобы получить соответствующие временные интервалы.
Прямо сейчас я передаю текущее время в UTC в виде строки, а не делаю что-то вроде current_timestamp at time zone 'UTC'
.
(extract(epoch from starts_at) - extract(epoch from (date '2020-11-09 06:20:00' (users.hours_before * INTERVAL '1 hour')))) = 0
Вот тестовый запрос, чтобы увидеть, какие значения находятся внутри a select
. В этом примере было бы, (6 * INTERVAL '1 hour')
где users.hours_before
было бы. Я использую статику 6
во время настройки.
select
(extract(epoch from "starts_at") - extract(epoch from date '2020-11-09 06:20:00')) / 3600 as hours,
(extract(epoch from "starts_at") - extract(epoch from (date '2020-11-09 06:20:00' (6 * INTERVAL '1 hour')))) as other_interval,
*
from
"time_slots"
where
"starts_at" > '2020-11-09 06:20:00'
order by hours asc;
Например, следующий запрос имеет те же hours
other_interval
значения и, что и приведенный выше запрос, несмотря 2020-11-09 10:00:00
на то, что вместо даты 2020-11-09 06:00:00
. Разве эти столбцы не должны отличаться на 4 часа, поскольку они меняются на 4 часа?
select
(extract(epoch from "starts_at") - extract(epoch from date '2020-11-09 10:00:00')) / 3600 as hours,
(extract(epoch from "starts_at") - extract(epoch from (date '2020-11-09 10:00:00' (6 * INTERVAL '1 hour')))) as other_interval,
*
from
"time_slots"
where
"starts_at" >= '2020-11-09 06:00:00'
order by hours asc;
Комментарии:
1.
date '2020-11-09 10:00:00'
теряет часть времени, потому что у adate
нет времени. Вы хотитеtimestamp '2020-11-09 10:00:00'
2. Из любопытства: почему бы вам сначала не вычесть значения, а затем получить эпоху?
extract(epoch from starts_at - timestamp '2020-11-09 10:00:00'
) `3. @a_horse_with_no_name
timestamp
делает свое дело. Чтобы ответить на ваш второй вопрос, потому что я понятия не имею, что я делаю! ха, спасибо за направление.