используя convert_tz для сравнения даты и времени - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть таблица со значениями дня / времени, которые разбиты на поля date и int соответственно, а не на одну дату / время. Каждая строка имеет уникальную комбинацию даты и часа, поэтому каждый день содержит 24 строки.

Моя задача - выбрать данные, релевантные для пользователей в другом часовом поясе, когда мне нужно учесть эти корректировки часового пояса в операторе where. Например, если пользователь на два часа опережает время сервера, оператор where должен его отражать:

 ...where concat(theDate,' ',theHour) > convert_tz(concat('2012-01-01',' ','00:00:00'), '-8:00', '-6:00')

.. скажем, для PST по центральному времени. Но, очевидно, я не могу использовать convert_tz или значение, с которым оно было вычислено в предложении where.

Я бы хотел использовать convert_tz, а не неуклюжий DATE_ADD или что-то еще. Что можно сделать?

Может быть, я ошибаюсь, и вы можете использовать convert_tz в предложении where. Вот основная проблема:

select *, convert_tz(concat(theDay,' ',theHour), '-8:00', '-8:00') 'dayTZ' 
from stats 
where convert_tz(concat(theDay,' ',theHour), '-8:00', '-8:00') > '2011-01-25 05:00:00';

Вышеуказанные значения часов по-прежнему возвращаются раньше, чем 5.

1 Ответ

1 голос
/ 01 февраля 2012

Попробуйте добавить str_to_date:

select *, convert_tz(sconcat(theDay,' ',theHour), '-8:00', '-8:00') 'dayTZ' 
from stats 
where str_to_date(convert_tz(concat(theDay,' ',theHour), '-8:00', '-8:00'), '%Y-%m-%d %H:%i:%s') > str_to_date('2011-01-25 05:00:00', '%Y-%m-%d %H:%i:%s');
...