Используя convert_tz для сравнения даты и времени

У меня есть таблица со значениями дня / времени, которые разбиты на поля даты и 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 ответ

Решение

Попробуйте добавить 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');
Другие вопросы по тегам