2011-11-09 15 views
0

Olsenの国/都市の指定ではなく、特定の日付の適切なタイムゾーンの省略形を表示したいとします(たとえば、「US/Pacific」の代わりに「PST」を表示する)。私はtime_zone_transitionテーブルから省略形を使用しますか?

指定された日付に使用する正しい省略形を照会する方法は明確ではありません。 time_zone_nameテーブルの同様のレコード間の唯一の違いは、time_zone_transitionの 'transition_type_id'列です。

ここではサンプルクエリを示します。私は、実際の日付を接続して、どのtransition_type_idが日付と一致しているかを知り、そのIDに基づいてフィルタリングして略語を取得できるようにする必要があると考えています。

SELECT 
    tz.name 
    ,tpe.abbreviation 
    ,tpe.offset/3600 
    ,tpe.* 
FROM mysql.time_zone_transition_type tpe, mysql.time_zone_name tz 
WHERE tz.time_zone_id = tpe.time_zone_id 
    AND tz.name = 'US/Pacific' ; 
+0

なぜtz.time_zone_idを使用しないのですか?MySQLで標準化されるべきですか?ああ、暗黙のSQL '89構文の代わりに明示的な結合を使用することをお勧めします。 – Johan

+0

ヨハン、返事ありがとう。私はここで何かを逃しているかもしれない。さまざまなtzテーブルの 'time_zone_id'カラムは整数だけであり、私が表示したい人間が読める一般的な略語ではありません。例えば、 'timze_zone_name'テーブルに 'Africa'/Abidjan、1のようなデータを持つ 'name' と 'time_zone_id'カラムがあります。 は、結合構文についてのあなたの提案を確実に受け入れます。古い習慣は激しく死ぬ – Fred

答えて

0

これはあなたが探しているクエリだと思います。最終的には、アプリケーションテーブルと結合し、適切なtime_zone_idを選択するだけでなく、このクエリでハードコードされた日付時刻を置き換える必要があります。

SELECT * FROM mysql.time_zone_transition_type ztt 
INNER JOIN mysql.time_zone_transition tzt 
ON tzt.Time_zone_id = ztt.Time_zone_id 
AND tzt.Transition_type_id = ztt.Transition_type_id 
where tzt.Time_Zone_id = 163 
and UNIX_TIMESTAMP('2014-01-23 16:00') >= Transition_time 
order by Transition_time desc 
LIMIT 1; 
関連する問題