2012-04-27 23 views
1

私はタイムゾーンの設定テーブルから東部とIDのすべてに格納されているショー時間を持っています。タイムゾーン設定テーブルには、Timezone_id、GMTオフセット、およびタイムゾーン名があります。私はショータイムは、元のタイムゾーンに変換引っ張っするクエリを記述しようとしていますなどmysqlクエリのタイムゾーン変換

オフセット

GMTは、6、-4、3.5、-4.5のように保存されます。私はこのようにしています。

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オフセットを適用することです。表:

START_TIMEはConvert_TZ

EDITに渡す「3.5」から「3.30」のよう また、もう一つの問題は、変換されたフォーマット「2012年4月23日午前10時15分00秒」のように日付フォーマットであります構造。メインフィールド。

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

他のどの機能もミックスに役立ちますか?

+0

あなたが行っていることをよりよく理解するためにテーブル構造を投稿できますか? – Zuul

+0

2つのテーブルの基本構造を追加しました。 –

+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 

結果は、exようでしたpected!かかわらず、あなたはそれは、このようにCONCATを失うと、パフォーマンスの向上クエリを簡素化する完全なフォーマットだとGMTオフセットを格納する必要があります


。 例:+5の代わりに+05:00

これは何らかの方法で役立ちますか?


MYSQL IFが含まれており、その上に0.5としてOFFSET保存されたGMTは、それが置き換えられます場合は、だから、

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` 

を置き換えるためにEDITED:30、それ以外の場合は、それが追加されます:00を既存の値に設定します。 (テストし、期待どおりの値を返します)

+0

それはどこに問題がありますか?あなたが私の質問から分かるように、GMTオフセットは+3.5、+6、+ 4.5などに保存されます。しかし、私たちは+4.5(これは+4:30になるはずです)にどのように対処しますか? –

+0

GMTオフセットは保存されていませんか?そして、あなたは何を意味しますか?4.5は4:30でしょうか? – Zuul

+0

"GMTオフセットが保存されているのはコントロールできませんか?"しかし、私は今このフォーマットを変更することはできません。 2番目の質問については。 Convert_TZは "(+/-)00:00"の形式で3番目の引数をとります。だから私はここで4.5を渡すことはできませんが、私は+6を "+6:00"として渡すことができます。 –

関連する問題