MySQLのNOW()関数とCURDATE()関数の違いと使い方を解説
MySQLにおけるNOW()とCURDATE()の違い
MySQLには現在の日時や日付を取得するための便利な関数が用意されています。その代表的なものがNOW()とCURDATE()です。
両者の違いは以下の通りです。
- NOW(): 現在の日付と時刻(日時)をタイムスタンプ形式で返します。
- CURDATE(): 現在の日付のみを返し、時刻は含まれません。
それでは、SELECT文を使ってそれぞれの関数の動作を確認してみましょう。
NOW()関数の実行例
まずはNOW()関数を実行してみます。
mysql> select NOW();
実行結果は以下の通りです。日付に加えて時刻まで表示されているのがわかります。
+---------------------+ | now() | +---------------------+ | 2018-11-27 15:17:01 | +---------------------+ 1 row in set (0.00 sec)
CURDATE()関数の実行例
次にCURDATE()関数を実行します。
mysql> select CURDATE();
実行結果を見ると、時刻は表示されず、日付のみが出力されていることが確認できます。
+------------+ | curdate() | +------------+ | 2018-11-27 | +------------+ 1 row in set (0.00 sec)
テーブルを使った動作確認
次に、実際のテーブルを使って両関数の挙動を詳しく見ていきましょう。まず、datetime型のカラムを持つテーブルを作成します。
mysql> create table CurrentdateAndNowDemo
-> (
-> Time datetime
-> );
Query OK, 0 rows affected (0.82 sec)作成したテーブルに対して、now()とcurdate()を使ってレコードを挿入します。
mysql> insert into CurrentdateAndNowDemo values(now()); Query OK, 1 row affected (0.11 sec) mysql> insert into CurrentdateAndNowDemo values(curdate()); Query OK, 1 row affected (0.14 sec)
それでは、now()が現在の日時を、curdate()が現在の日付を正しく返しているかどうか確認してみましょう。
mysql> select *from CurrentdateAndNowDemo;
実行結果は以下の通りです。now()で挿入したレコードには現在の日時が、curdate()で挿入したレコードには時刻が「00:00:00」になった現在の日付が格納されています。
+---------------------+ | Time | +---------------------+ | 2018-11-27 15:16:32 | | 2018-11-27 00:00:00 | +---------------------+ 2 rows in set (0.00 sec)
まとめ
このように、NOW()は「YYYY-MM-DD HH:MM:SS」形式で現在の日時を返すのに対し、CURDATE()は「YYYY-MM-DD」形式で日付のみを返します。なお、CURDATE()の結果をdatetime型のカラムに挿入すると、時刻部分は自動的に「00:00:00」となります。用途に応じて使い分けることで、ログ記録や日付管理などの処理を効率的に行うことができます。
-
MySQLのNOW()・CURDATE()関数でUTCを使用する方法
はじめにMySQLのNOW()やCURDATE()関数は、デフォルトではサーバーのシステムタイムゾーンに基づいた値を返します。これらの関数の結果を協定世界時(UTC)に統一したい場合は、設定ファイル「my.cnf」(Windows環境ではmy.iniの場合もあります)を編集するのが確実な方法です。手順1:データディレクトリの場所を確認するまず、次のクエリを実行して、設定ファイルが配置されているデータディレクトリの場所を確認しましょう。mysql> SELECT @@datadir;実行結果は以下のようになります。+-------------------------------------
-
MySQLでCURDATE()とLIKE句を使った部分一致検索の方法
MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----