Как найти идентификаторы пользователей, чье местное время не находится между временем начала и конца, учитывая их часовой пояс? - PullRequest
0 голосов
/ 05 марта 2020
create table test(user_id integer not null primary key, tz varchar(64) not null, dnd_start_time integer, dnd_end_time integer);
  • У меня есть таблица, созданная следующим образом, в которой хранится user_id, часовой пояс пользователя в строковом формате и время начала и окончания без помех
  • Как выбрать всех пользователей чье местное время НЕ находится между временем начала и временем окончания согласно их часовому поясу?
  • Таблица выглядит следующим образом

enter image description here

1 Ответ

2 голосов
/ 05 марта 2020
SELECT user_id
FROM (SELECT user_id,
             make_time(dnd_start_time, 0, 0) AS stime,
             make_time(dnd_end_time, 0, 0) AS etime,
             CAST((current_timestamp AT TIME ZONE tz) AS time) AS loctime
      FROM test)
WHERE stime <= etime AND loctime NOT BETWEEN stime AND etime
   OR stime > etime AND loctime BETWEEN etime AND stime;
...