CONVERT_TZ関数 (指定した日時のタイムゾーンを変更した値を取得する)

MySQL で CONVERT_TZ 関数を使用すると引数に指定した日時を表す値を別のタイムゾーンに変更した値を取得することができます。ここでは MySQL における CONVERT_TZ 関数の使い方について解説します。

(Last modified: )

CONVERT_TZ関数の使い方

CONVERT_TZ 関数は引数に指定した日時の値についてタイムゾーンを変更した値を取得します。書式は次の通りです。

CONVERT_TZ(dt,from_tz,to_tz)

対象となる日時( dt )に対して現在のタイムゾーン( from_tz )から別のタイムゾーン( to_tz ) に変更した場合の日時を取得します。

タイムゾーンの指定には 'Asia/Tokyo' や 'America/New_York' などの名前付きタイムゾーンや '+09:00' や '-05:00' などの UTC(協定世界時) との差で指定することができます。

-- --

それでは実際に試してみます。次のように実行してください。

select convert_tz('2019-05-14 08:35:14', 'Asia/Tokyo', 'America/New_York');

MySQL/CONVERT_TZ 関数の使い方(1)

別の指定方法で試して見ます。

select convert_tz('2019-05-14 08:35:14', '+00:00','+09:00');

MySQL/CONVERT_TZ 関数の使い方(2)

このように指定した日時の値に対してタイムゾーンを変更した場合の日時を取得することができます。

CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合

CONVERT_TZ 関数を使用するときにタイムゾーンの指定方法として UTC との時差で指定した場合は正常に動作するけれど、名前付きタイムゾーンで指定すると NULL が返ってくる場合、 MySQL で名前付きタイムゾーンが使用できるように設定されていない可能性があります。

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(1)

Windows とそうでない場合で対応の方法が異なりますがここでは Windows の環境の場合の手順を解説します。( Linux や FreeBSD など Windows 以外の場合は「Populating the Time Zone Tables」を参照してください)。

最初に次のURLへアクセスしてください。

MySQL :: Time zone description tables

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(2)

次の位置にある timezone_2019a_posix_sql.zip をクリックしてください。

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(3)

ダウンロードが開始されます。ダウンロードが完了したらファイルを解凍してください。 timezone_posix.sql というファイルが一つ含まれていますので任意のディレクトリに置いておいてください。今回は D:\tmp ディレクトリに置いておきました。

次にコマンドプロンプトから次のように実行してください。( timezone_posix.sql ファイルを置いておいたディレクトリに合わせて変更してください)。パスワード待ちの状態となるので root ユーザーのパスワードの入力を行ってください。

mysql -u root -p mysql < d:\tmp\timezone_posix.sql

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(4)

少し待つと(数秒です)入力待ちの状態に戻ります。これで設定は完了です。 MySQL を再起動してください。

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(5)

あらためて名前付きタイムゾーンを使用して CONVERT_TZ 関数のサンプルを実行してみると、今度は NULL ではなく正しい値が返ってきました。

MySQL/CONVERT_TZ関数で名前付きタイムゾーンが使用できずNULLを返す場合(6)

-- --

convert_tz 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。