MySQLで現在日時の取得方法
MySQLで現在の日時を取得する方法はいくつかあります。
最も一般的に使われる関数はNOW()とCURRENT_TIMESTAMP()です。
これらの関数はどちらも現在の日時を「YYYY-MM-DD HH:MM:SS」形式で返します。
NOW()関数
NOW()関数は、現在の日時を返す最もよく使われる関数です。
以下はその使用例です。
SELECT NOW();
このクエリを実行すると、例えば次のような結果が得られます。
2024-09-18 14:30:00
NOW()は日付と時間の両方を含んだ形式で結果を返します。
具体的には、現在の年、月、日、時間、分、秒が返されます。
NOW()関数はデータベースのサーバー時間に基づいて動作するため、サーバーが設置されている場所のタイムゾーンが影響します。
CURRENT_TIMESTAMP()関数
CURRENT_TIMESTAMP()関数もNOW()と同様に、現在の日時を返します。
実質的に両者は同じ動作をしますが、CURRENT_TIMESTAMP()はSQL標準に準拠している点が異なります。
SELECT CURRENT_TIMESTAMP();
このクエリも、NOW()と同じ形式で現在日時を返します。
例えば次のような結果です。
2024-09-18 14:30:00
NOW()とCURRENT_TIMESTAMP()は通常、同じ値を返しますが、システムや環境によっては細かい違いがある場合もあるため、標準SQLに準拠したい場合にはCURRENT_TIMESTAMP()を選択することが推奨されます。
SYSDATE()関数
SYSDATE()も現在の日時を返しますが、NOW()やCURRENT_TIMESTAMP()とは異なり、クエリの実行時点での正確なタイムスタンプを返します。
これはマルチスレッド環境で、同じクエリ内でNOW()が異なるタイミングで実行された場合に、NOW()ではクエリ全体で同じ時刻が返されるのに対して、SYSDATE()は異なる時刻を返す場合があるためです。
SELECT SYSDATE();
このクエリも、現在の日時を返しますが、SYSDATE()はスレッドセーフな動作が必要な場合に有効です。
日付のみや時間のみを取得する方法
現在の日時から日付部分や時間部分だけを取得したい場合には、以下の関数を使用します。
CURDATE()関数
CURDATE()関数は、現在の日付のみ(時間部分を含まない)を取得するための関数です。
日付は「YYYY-MM-DD」形式で返されます。
SELECT CURDATE();
実行結果の例:
2024-09-18
CURTIME()関数
CURTIME()関数は、現在の時間のみ(秒まで)を取得するための関数です。
結果は「HH:MM:SS」形式で返されます。
SELECT CURTIME();
実行結果の例:
14:30:00
日付と時間のフォーマット
取得した日時を特定の形式で表示したい場合は、DATE_FORMAT()関数を使用します。
この関数では、任意のフォーマットに従って日付や時間を文字列として返すことができます。
例えば、「YYYY/MM/DD HH:MM」形式で表示したい場合は次のようにします。
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
実行結果の例:
2024/09/18 14:30
このように、DATE_FORMAT()を使用することで、好みのフォーマットに変換して表示することができます。
タイムゾーンの設定
MySQLの日時はデフォルトでサーバーのタイムゾーンに依存しますが、クライアントやセッションごとにタイムゾーンを変更することもできます。
タイムゾーンを指定するには、次のコマンドを使用します。
SET time_zone = '+09:00';
このコマンドを実行すると、以降のセッションでは日本標準時(JST)が使用されます。
タイムゾーンを設定した後で日時を取得すると、指定したタイムゾーンで行う日時が返されます。
SELECT NOW();
このクエリは、日本標準時(JST)での現在の日時を返します。