データベース内のデータを使用してジョブのスケジューリングを処理するプロセスがあります。ユーザーは、ジョブの実行日時を設定するときにタイムゾーンを選択できます。
ユーザーのタイムゾーンをサーバーのタイムゾーンに変換できる必要があります。
サーバーのタイムゾーンをハードコーディングしたくありません。私の問題を確認するには、以下のコードを参照してください。
タイムゾーン テーブルが利用可能で、データがあることを確認しました。
次のクエリは、「EDT」のみを返します。
select IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone)
しかし、EDT を convert_tz に正常に戻すことができません。私の問題を示すために、次のクエリを実行してください。
select schedule_time,
time_zone,
convert_tz(schedule_time,'US/Eastern','US/Pacific') 'convert_tz1',
convert_tz(schedule_time,'EST','PST') 'convert_tz2'
from batch_control
以下がリターンです。
2013-08-27 01:00:00 EST 2013-08-26 22:00:00 NULL
2013-08-26 01:00:00 EST 2013-08-25 22:00:00 NULL
2013-08-26 01:00:00 EST 2013-08-25 22:00:00 NULL
2012-09-28 15:22:00 EST 2012-09-28 12:22:00 NULL
2012-10-15 09:52:00 EST 2012-10-15 06:52:00 NULL
mysql自体からタイムゾーン値の出力を取得してconvert_tz関数に戻すことができない理由について混乱しています。
私の最終的なコードは次のようになります。
select convert_tz(schedule_time,time_zone,IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone)) 'execute_time'
from batch_control