MySQLのDATE型に時刻を保存できないのはなぜ?DATETIME・TIMESTAMPとの違いを解説
MySQLのDATEデータ型のデフォルト形式は「YYYY-MM-DD」です。この形式には時刻(時間)の情報を格納する仕組みがないため、DATEデータ型は日付のみを扱うことができ、時刻値と組み合わせて使用することはできません。
DATE関数を使った具体例
以下の例を見ると分かるように、MySQLでは日付と一緒に時刻を渡しても、返されるのは日付の部分だけです。
mysql> select DATE("2017-09-25 09:34:21");
+-----------------------------------+
| DATE("2017-09-25 09:34:21") |
+-----------------------------------+
| 2017-09-25 |
+-----------------------------------+
1 row in set (0.04 sec)このように、DATE()関数は引数として与えられた文字列から日付部分だけを抽出して返します。時刻の情報は自動的に切り捨てられるため、DATE型のカラムに時刻付きの値を挿入しても、時刻部分は保存されません。
日付と時刻の両方を保存したい場合
日付と時刻を一緒に扱いたい場合は、DATETIMEまたはTIMESTAMPデータ型を使用します。
- DATETIME型:「YYYY-MM-DD HH:MM:SS」形式で日付と時刻の両方を保存できます。保存可能な範囲は「1000-01-01 00:00:00」から「9999-12-31 23:59:59」と広く、タイムゾーンの影響を受けません。
- TIMESTAMP型:こちらも「YYYY-MM-DD HH:MM:SS」形式ですが、内部ではUTCタイムスタンプとして管理されます。保存範囲は「1970-01-01 00:00:01 UTC」から「2038-01-19」までと限られますが、タイムゾーン変換が自動的に行われる点が特徴です。
用途に応じてこれらの型を使い分けることで、日付だけでなく時刻の情報も正確にデータベースへ保存できるようになります。
-
MySQLでNULL値のデータを抽出するSELECTクエリの使い方
MySQLでNULL値が格納されたレコードを取得するには、WHERE句で「IS NULL」を使用します。NULLは通常の値とは異なる特殊な状態を表すため、「= NULL」という等号による比較は正しく動作しない点に注意が必要です。 サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable ( CustomerName varchar(100), CustomerCountryName varchar(100) ); Query OK, 0 rows affected (0.95 sec) テストデータの
-
MySQLクエリで日付・時刻の値を秒単位で加算(インクリメント)する方法
MySQLで日付・時刻(DATETIME)の値に指定した秒数を加算したい場合は、DATE_ADD()関数とINTERVAL句を組み合わせて使用します。この記事では、実際にテーブルを作成し、秒単位で時刻をインクリメントする手順を具体例とともに解説します。 サンプルテーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1867 ( ArrivalTime datetime &