MySQLのINTERVALキーワードで算術演算子(+、-、*、/)を使う方法
MySQLでは、INTERVALキーワードの単位値(数量の部分)に対して、算術演算子(+、-、*、/)を使用できます。これにより、日付計算の値を動的に算出しながら指定することが可能です。
以下では、基準日として '2017-10-22' を使用し、各演算子の動作を具体例とともに確認していきます。
加算(+)の使用例
単位値に 2+2 を指定すると、演算結果の 4 年が加算されます。
mysql> Select date('2017-10-22' + INTERVAL 2+2 Year) AS 'Date After (2+2)Years';
+------------------------+
| Date After (2+2) Years |
+------------------------+
| 2021-10-22 |
+------------------------+
1 row in set (0.00 sec)2017年から4年後の 2021-10-22 が返されていることがわかります。
減算(-)の使用例
単位値に 2-2 を指定すると、演算結果の 0 年となるため、元の日付がそのまま返されます。
mysql> Select date('2017-10-22' + INTERVAL 2-2 Year) AS 'Date After (2-2)Years';
+------------------------+
| Date After (2-2) Years |
+------------------------+
| 2017-10-22 |
+------------------------+
1 row in set (0.00 sec)乗算(*)の使用例
単位値に 2*2 を指定すると、演算結果の 4 年が加算されます。
mysql> Select date('2017-10-22' + INTERVAL 2*2 Year) AS 'Date After (2*2)Years';
+------------------------+
| Date After (2*2) Years |
+------------------------+
| 2021-10-22 |
+------------------------+
1 row in set (0.00 sec)除算(/)の使用例
単位値に 2/2 を指定すると、演算結果の 1 年が加算されます。
mysql> Select date('2017-10-22' + INTERVAL 2/2 Year) AS 'Date After (2/2) Years';
+------------------------+
| Date After (2/2) Years |
+------------------------+
| 2018-10-22 |
+------------------------+
1 row in set (0.00 sec)まとめ
このように、INTERVALキーワードの単位値には算術演算子を組み合わせることができ、演算結果がそのままインターバルの値として評価されます。固定値ではなく計算式でインターバルを指定したい場合に便利な機能です。
-
MySQLテーブルへの日付レコード挿入時にINTERVALキーワードは使える?使い方を解説
はい、MySQLではデータレコードを挿入する際にINTERVALキーワードを使用できます。INTERVALを使うことで、指定した日時に対して一定の時間や日数を加算した値を、そのままINSERT文でテーブルに登録できます。まずは、動作を確認するためのテーブルを作成しましょう。mysql> create table DemoTable ( ArrivalTime datetime ); Query OK, 0 rows affected (0.52 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは、日付レコードを挿入する際にINTERVALキーワード
-
MySQLで月ごとにテーブルの値を合計する方法を解説
MySQLでテーブル内の値を月ごとに合計したい場合は、EXTRACT()関数を使用します。この関数を使うことで、日付から特定の月の情報を抽出できます。例えば、年に関係なく1月のすべての価格を合計したい場合などに便利です。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1415 -> ( -> ProductPurchaseDate date, -> ProductPrice int -> ); Query OK, 0 rows affected (0.53 se