MySQLの区切り文字(デリミタ)とは?ストアドプロシージャ定義時の使い方を実例付きで解説
MySQLの区切り文字(デリミタ)とは
MySQLにおける区切り文字(デリミタ)は、ストアドプロシージャやストアドファンクションを定義する際、あるいはトリガーを作成する際に活用される重要な仕組みです。デフォルトの区切り文字はセミコロン(;)です。
通常、MySQLクライアントはセミコロン(;)を1つのSQL文の終わりとして認識します。しかし、ストアドプロシージャの内部には複数のSQL文が含まれるため、そのまま定義すると文が途中で分割されてしまいます。そこで、区切り文字を $$ や // などの別の記号に一時的に変更することで、複数のステートメントからなる処理全体をひとつのまとまりとして登録できるようになります。
サンプルテーブルの用意
ここでは、「GetRecordFromNow」というテーブルを例にして説明します。このテーブルには、次のようなレコードが格納されているものとします。
+---------------------+ | YourDateTime | +---------------------+ | 2018-12-07 22:30:18 | | 2018-12-03 22:30:31 | | 2018-12-02 22:30:41 | | 2018-12-01 22:30:56 | | 2018-12-03 22:31:04 | +---------------------+ 5 rows in set (0.00 sec)
区切り文字を使ったプロシージャ作成の手順
delimiter キーワードは、MySQLクライアントが提供する機能のひとつです。以下は、区切り文字を変更して上記テーブルの全レコードを表示するストアドプロシージャを作成し、実際に呼び出すまでの実行例です。
mysql> delimiter //
mysql> create procedure DisplayALL()
-> begin
-> select *from GetRecordsFromNow;
-> end
-> //
Query OK, 0 rows affected (0.40 sec)
mysql> delimiter ;
mysql> call DisplayALL();
+---------------------+
| YourDateTime |
+---------------------+
| 2018-12-07 22:30:18 |
| 2018-12-03 22:30:31 |
| 2018-12-02 22:30:41 |
| 2018-12-01 22:30:56 |
| 2018-12-03 22:31:04 |
+---------------------+
5 rows in set (0.07 sec)
Query OK, 0 rows affected (0.10 sec)処理の流れのポイント
- delimiter // … 区切り文字を「//」へ一時的に変更します。これにより、プロシージャ内のセミコロンが文の終端として誤認識されなくなります。
- create procedure ~ end // … BEGIN~ENDブロックを含むプロシージャ全体を、ひとつの命令として登録します。
- delimiter ; … 定義完了後は、区切り文字を元のセミコロン(;)に戻します。戻し忘れると、以降の通常のSQL操作に支障が出る場合があります。
- call DisplayALL(); … 作成したプロシージャを呼び出して実行します。テーブル内の全レコードが表示されます。
このように、区切り文字の変更はストアドプログラムを正しく定義するために欠かせないテクニックです。作業後は必ず元の区切り文字へ戻すことを忘れないようにしましょう。
-
MySQLでCURRENT_TIMESTAMPをAM/PM形式にフォーマットする方法
MySQLで時刻データをAM/PM形式(12時間制)で表示したい場合は、DATE_FORMAT()関数を使用します。フォーマット指定子として %r を使うことで、「hh:mm:ss AM/PM」という形式で時刻を簡単に取得できます。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable ( LoginTime time ); Query OK, 0 rows affected (0.48 sec)レコードの挿入insertコマンドを使って、テーブルにいくつかのレコードを挿入します。mysql> insert
-
MySQLで日付から1日を引く方法|DATE_SUB関数の使い方
MySQLで日付から1日を引く(前日の日付を取得する)には、DATE_SUB() 関数を使用します。この記事では、実際にテーブルを作成し、DATE_SUB() を使って日付から1日を減算する手順をわかりやすく解説します。サンプルテーブルの作成まず、タイムスタンプ型のカラムを持つテーブルを作成します。以下のSQLを実行してください。mysql> create table DemoTable -> ( -> AdmissionDate timestamp -> );Query OK, 0 rows affected (1.05 sec)レコードの挿入次に、