2012-04-27 2 views
1

У меня есть время показа, хранящееся во всех в Восточном и ID из таблицы настроек часового пояса. Таблица настроек часового пояса имеет Timezone_id, GMT offset и имя часового пояса.mysql Query Timezone conversion

GMT смещение сохраняются как +6, -4, +3,5, -4.5 и т.д.

Я пытаюсь написать запрос, чтобы вытащить Showtime преобразуется в исходное часовому поясу. Я так делаю.

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.START_TIME, '+00:00', '-5:00'), 
'+00:00',  CONCAT(B.GMT_OFFSET , ':00')), '%Y-%m-%e %r:%i') 
AS 'start_time' from shows A, tz_settings B AND <<JOINS>>; 

Что я здесь делаю, сначала нужно преобразовать время из ET в GMT, а затем применить GMT GMT.

START_TIME в формате даты, как «2012-4-23 10:15:00» Кроме того, еще одна проблема преобразования форматов, как «3,5» на «3,30», чтобы перейти к Convert_TZ

EDIT: Таблица состав. Основные поля.

shows: 'id', 'show_name', 'stat_time', 'tz_id' 
    tz_settings: 'tz_id', 'gmt_offset','tz_name' 

Любые идеи? Любые другие функции помогут в миксе?

+0

Можете ли вы опубликовать свою структуру таблицы, чтобы лучше понять, что вы делаете? – Zuul

+0

Просто добавлена ​​базовая структура двух таблиц. –

+0

Одна вещь, которую я не могу понять, если вы конвертируете из ET в GMT, почему вы хотите исключить из этого преобразования те из ET? так как вы заявляете, что все они в ET? (или я неправильно прочитал ваш вопрос?) – Zuul

ответ

1

Не знаю, что это проблема, которую вы имеете, но я просто построить 2 таблицы MYSQL с Вашей структурой:

MySQL таблиц

TABLE shows ['id', 'show_name', 'start_time', 'tz_id'] 
TABLE tz_settings ['tz_id', 'gmt_offset','tz_name'] 

И с этим запросом MySQL :

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.START_TIME, '+00:00', '-5:00') , '+00:00', CONCAT(B.GMT_OFFSET, ':00')) , '%Y-%m-%e %r:%i') AS 'start_time' 
FROM shows A, tz_settings B 
WHERE A.id =1 
AND B.tz_id = A.tz_id 

результат оказался экс pected!


Несмотря на это, Вы должны хранить GMT OFFSET с его полный формат, чтобы упростить таким образом ваш запрос потери CONCAT и повышения производительности. Пример: вместо +5, хранить +05: 00

Вам это помогает?


отредактирован ВКЛЮЧИТЬ MYSQL ЕСЛИ И ЗАМЕНА

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.STAT_TIME, '+00:00', '-5:00') , '+00:00', if(B.GMT_OFFSET LIKE '%.5', REPLACE(B.GMT_OFFSET, '.5', ':30') , CONCAT(B.GMT_OFFSET, ':00'))) , '%Y-%m-%e %r:%i') AS 'start_time' 
FROM shows A, tz_settings B 
WHERE A.`id` =1 
AND B.`tz_id` = A.`tz_id` 

Итак, если хранимая GMT OFFSET, как .5 на нем, он будет заменен: 30, в противном случае, она будет добавлять : 00 к существующему значению. (Протестировано и возвращает значение, как ожидалось)

+0

Вот где проблема. Как вы можете видеть из моего вопроса, GMT смещение сохраняется как +3.5, +6, +4.5 и т. Д. Хорошо с +6. Но как мы имеем дело с +4.5 (что должно быть +4: 30)? –

+0

Но у вас нет контроля за сохранением смещения GMT?И что вы имеете в виду: 4.5 должно быть 4:30? – Zuul

+0

Не знаете, что вы подразумеваете под «Но у вас нет контроля за сохранением смещения по GMT»? Но я не могу изменить этот формат сейчас. Что касается второго вопроса. Convert_TZ принимает третий аргумент в форме «(+/-) 00:00». Поэтому я не могу передать 4.5 здесь, в то время как я могу пройти +6 как «+6: 00». –