MySQLはなぜ「7 days 2 hours」ではなく「7 DAY 2 HOUR」という間隔表記を使うのか?
MySQLのINTERVAL句で単位キーワードが単数形でなければならない理由
MySQLでは、英語の文法規則に関係なく、INTERVAL句で使用する単位キーワード(DAY、HOUR、MINUTEなど)は必ず単数形で指定する必要があります。これは、MySQLの構文パーサーがこれらの単位キーワードを固定のトークン(予約語)として扱っているためで、「days」や「hours」といった複数形は構文として認識されません。
そのため、誤って複数形で間隔を指定しようとすると、MySQLは以下のような構文エラーを返します。
mysql> SELECT '2017-02-25 05:04:30' + INTERVAL 2 days; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'days' at line 1
エラーメッセージの通り、「days」の部分で構文エラー(ERROR 1064)が発生しています。これはSQLの文法ミスを示す典型的なエラーで、単位キーワードの綴りがMySQLの仕様と一致していないことが原因です。
正しい書き方
単位キーワードを単数形に直せば、クエリは正常に実行されます。
mysql> SELECT '2017-02-25 05:04:30' + INTERVAL 2 DAY; +---------------------------------------+ | '2017-02-25 05:04:30' + INTERVAL 2 DAY | +---------------------------------------+ | 2017-02-27 05:04:30 | +---------------------------------------+
複数の単位を組み合わせる場合
「7日と2時間」のように複数の単位を組み合わせたい場合は、以下のように単数形のキーワードを連結して記述します。
mysql> SELECT '2017-02-25 05:04:30' + INTERVAL '7 2' DAY_HOUR;
このように、MySQLのINTERVAL構文では数量と単位キーワードの組み合わせが厳密に定義されているため、英語の自然な表現(複数形)ではなく、MySQLが定めた単数形のキーワードを使用する必要があるのです。
-
【MySQL】日付レコードから曜日を減算し、曜日名とともに結果を表示する方法
はじめにMySQLで保存された日付レコードから、その週の開始日(月曜日)を計算して減算し、曜日名とともに結果を表示したい場合があります。このような処理には DATE_FORMAT() 関数を使用します。SUBDATE() と WEEKDAY() を組み合わせることで、各日付が属する週の月曜日の日付を「Mon 19 Oct」のような形式で取得できます。以下、具体的な手順をサンプルコードとともに解説します。1. テーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable1820 ( AdmissionDate
-
MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方
MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (