Используя 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');