MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

INTERVALキーワードに複数の単位値を指定した場合、MySQLはどのような結果を返すのか?

INTERVALキーワードに対して「'4 2'」のように複数の値が指定された場合、MySQLはそのうち最初の値のみを考慮します。そして、考慮された値とINTERVALキーワードで指定された単位に基づいて間隔を計算し、結果とともに警告を出力します。

以下の例で具体的な動作を確認してみましょう。

mysql> Select TIMESTAMP('2017-10-22 04:05:36' + INTERVAL '4 2' Hour)AS 'HOUR VALUE INCREASED BY 4';
+---------------------------+
| HOUR VALUE INCREASED BY 4 |
+---------------------------+
| 2017-10-22 08:05:36       |
+---------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> Show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '4 2' |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

実行結果の解説

上記のクエリでは、日時「2017-10-22 04:05:36」に対して「'4 2' Hour」という間隔を加算しています。結果として返されたのは「2017-10-22 08:05:36」、つまり最初の値「4」だけを使って4時間が加算された日時です。2番目の値「2」は計算に使用されていません。

同時に「1 warning」と表示されているように、SHOW WARNINGSで警告内容を確認すると、「Truncated incorrect INTEGER value: '4 2'」というメッセージが出力されます。これは「'4 2'という不正な整数値が切り詰められた」ことを意味します。

ポイントまとめ

  • INTERVALキーワードに複数の値を渡すと、MySQLは最初の値のみを使用して計算を行う。
  • 使用されなかった残りの値は切り詰められ、警告(エラーコード1292)が出力される。
  • 意図しない結果を避けるため、INTERVALには単一の値を指定するのが望ましい。

このように、複数の値を指定してもエラーにはなりませんが、期待どおりの計算結果が得られない可能性があるため、注意が必要です。

  1. MySQLのORDER BYで特定の値を先頭に表示する方法

    はじめにMySQLでは、ORDER BY句を工夫することで、特定の値を持つレコードを結果セットの先頭に表示できます。この記事では、その具体的な手法をサンプルコードとともに分かりやすく解説します。テーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable   -> (   -> Number int   -> );Query OK, 0 rows affected (0.57 sec)レコードの挿入INSERTコマンドを使用して、テーブルに複数のレコードを

  2. MySQLのCASE WHENで0と1の値を持つ列に条件を設定する方法

    MySQLで条件を設定するには、CASE WHENステートメントを使用します。本記事では、0または1の値を持つ複数の列に対して条件を設定し、その合計値に応じてステータスを判定する方法を、具体的なサンプルコードとともに解説します。1. テーブルを作成するまず、CREATE TABLE文でサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value1 int, -> Value2 int, -> Value3 int, -> Value4 int -> );Qu