これでnullが発生する場合は、TZテーブルが設定されていません:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
タイムゾーンテーブルを設定していない場合は、ユーザーテーブルの時間オフセットを更新してから、次の操作を行うことができます。
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
ただし、ユーザーのタイムゾーンを更新する方法は引き続き必要です。
これをWebアプリケーション用に作成している場合は、JavaScriptを介してタイムゾーンを取得できます。ここに記事 それはその方法を説明しています(これは試していませんが、うまくいくようです)。
上記の「間隔」に関する少しの説明...
MySQLのより多くのトリック構造の1つは、INTERVAL
の使用です。 キーワード、例で最もよく示されています(数値は式またはフィールド値にすることができます)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
あなたはそれらを好きなように足したり引いたりすることができます、これが私が決してしない理由です 日付/時刻の加算/減算/変換機能に煩わされる
select now() a, now() - interval 1 day + interval 4 hour + interval 8 minute b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-05-26 13:24:16 | 2011-05-25 17:32:16 |
+---------------------+---------------------+
負の数を使用できます(負のタイムゾーンオフセットに適しているはずです)。これらは同じです:
select now() - interval 1 month a, now() + interval -1 month b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-04-26 13:38:05 | 2011-04-26 13:38:05 |
+---------------------+---------------------+