MySQLで現在日時の取得方法

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)での現在の日時を返します。