Как найти время суток или диапазон в столбце TIMESTAMP - PullRequest
0 голосов
/ 28 марта 2012

У меня есть список событий с отметками времени начала и окончания в GMT UTC + 0. Столбец типа DATE, но также имеет время (не спроектированный мной).

Начальная временная метка явно индексируется

Мне нужно найти события, происходящие, скажем, с 06:00 до 22:00 по местному времени, которое является восточным летним временем UTC-4. в любой день между 31 марта и 2 апреля.

Единственный способ, который я нашел, это преобразовать его в TO_CHAR (). Он также не использует индекс, потому что он использует функцию TO_CHAR.

Вот к чему я так далеко.

  TO_CHAR(e.begin_time,'HH24:MI') >= TO_CHAR(FROM_TZ(TO_TIMESTAMP('06:00','HH24:MI'),'US/Eastern') AT TIME ZONE '+00:00','HH24:MI') AND 
  TO_CHAR(e.begin_time,'HH24:MI') <= TO_CHAR(FROM_TZ(TO_TIMESTAMP('22:00','HH24:MI'),'US/Eastern') AT TIME ZONE '+00:00','HH24:MI') AND 
  TO_CHAR(e.begin_time,'DDMMYYYY HH24:MI') >= TO_CHAR(FROM_TZ(TO_TIMESTAMP('Mar-31-2012 00:00','MON-DD-YYYY HH24:MI'),'US/Eastern') AT TIME ZONE '+00:00','DDMMYYYY HH24:MI') AND 
  TO_CHAR(e.begin_time,'DDMMYYYY HH24:MI') <= TO_CHAR(FROM_TZ(TO_TIMESTAMP('Apr-2-2012 23:59','MON-DD-YYYY HH24:MI'),'US/Eastern') AT TIME ZONE '+00:00','DDMMYYYY HH24:MI') 

Заранее спасибо,

Dan

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Производительность следующего может не соответствовать желаемому, но если вы приведете значение DATE к TIMESTAMP, вы можете использовать функцию EXTRACT способом, подобным следующему:

SELECT *
  FROM your_table e
  WHERE e.BEGIN_TIME BETWEEN TO_DATE('31-MAR-2012 00:00:00',
                                     'DD-MON-YYYY HH24:MI:SS')
                         AND TO_DATE('02-APR-2012 23:59:59',
                                     'DD-MON-YYYY HH24:MI:SS') AND
        EXTRACT(HOUR FROM CAST(e.BEGIN_TIME AS TIMESTAMP)) BETWEEN 6 AND 22

Делись и наслаждайся.

0 голосов
/ 28 марта 2012

При попытке получить данные, основанные на части поля даты, конечно, индекс не будет использоваться. Там просто нет никакого решения этой проблемы. Однако вы можете посмотреть на добавление индекса на основе функций для индексации по минутам дня в EST. Или, возможно, добавьте новый столбец для хранения minutes_est, заполните его триггером вставки / обновления, а затем основывайте свой запрос на этом.

Если это регулярно используемый запрос, а производительность полного сканирования таблицы не снижает его, то да - я думаю, что это один из тех случаев, когда вам может потребоваться выполнить редизайн в зависимости от ваших потребностей. ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...