Skip to main content

MariaDBでPostgreSQLのGENERATE_SERIESを使う

やり方は簡単、MariaDB10.0以降で下記のSQLを実行して
「Sequence」というストレージエンジンをインストールするだけ。

INSTALL SONAME "ha_sequence";

これだけでGENERATE_SERIESと同じ動きします。

このような感じで指定した範囲でデータを取得できます。

MariaDB [test]> SELECT seq FROM seq_0_to_10;
+-----+
| seq |
+-----+
|   0 |
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
|   9 |
|  10 |
+-----+
11 rows in set (0.00 sec)

ちゃんとステップも使えます。

MariaDB [test]> SELECT seq FROM seq_0_to_10_step_2;
+-----+
| seq |
+-----+
|   0 |
|   2 |
|   4 |
|   6 |
|   8 |
|  10 |
+-----+
6 rows in set (0.00 sec)

今まで、ユーザー定義変数を使ったりして面倒だった日付、時間の一覧も簡単に出力できます。

MariaDB [test]> SELECT ('2015-04-01' + INTERVAL seq DAY) AS day FROM seq_0_to_10;
+------------+
| day	     |
+------------+
| 2015-04-01 |
| 2015-04-02 |
| 2015-04-03 |
| 2015-04-04 |
| 2015-04-05 |
| 2015-04-06 |
| 2015-04-07 |
| 2015-04-08 |
| 2015-04-09 |
| 2015-04-10 |
| 2015-04-11 |
+------------+
11 rows in set (0.00 sec)

MariaDB [test]> SELECT (CAST('00:00:00' AS time) + INTERVAL 30*seq MINUTE) AS day FROM seq_0_to_10;
+----------+
| day	   |
+----------+
| 00:00:00 |
| 00:30:00 |
| 01:00:00 |
| 01:30:00 |
| 02:00:00 |
| 02:30:00 |
| 03:00:00 |
| 03:30:00 |
| 04:00:00 |
| 04:30:00 |
| 05:00:00 |
+----------+
11 rows in set (0.00 sec)

今まで知らなかったけどめっちゃ便利だわー

Source: Sequence – MariaDB Knowledge Base