【MySQL】BETWEEN:範囲指定してデータを取得する


ここではMySQLでBETWEEN演算子で範囲指定してデータを取得する方法を紹介しています。

BETWEEN:範囲指定してデータを取得する

列の値の範囲を指定してデータを取得するには、BETWEEN演算子を使います。

BETWEEN演算子の基本的な使い方は次の通りです。
指定した値1以上、値2以下の範囲に一致するレコードを取得します。

SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 値1 AND 値2;

次のSQLではCOL2列の値が20以上、40以下のデータのみを取得しています。

mysql> SELECT col1,col2 FROM tab;
+-------+------+
| col1  | col2 |
+-------+------+
| 00001 |   10 |
| 00002 |   20 |
| 00003 |   30 |
| 00004 |   40 |
| 00005 |   50 |
| 00006 | NULL |
+-------+------+
6 rows in set (0.00 sec)

mysql> SELECT col1,col2 FROM tab WHERE col2 BETWEEN 20 AND 40;
+-------+------+
| col1  | col2 |
+-------+------+
| 00002 |   20 |
| 00003 |   30 |
| 00004 |   40 |
+-------+------+
3 rows in set (0.00 sec)

また、NOTを追加することで、範囲指定した値以外のデータを取得することが出来ます。

次のSQLではCOL2列の値が20以上、40以下に一致しないデータを取得しています。

mysql> SELECT col1,col2 FROM tab;
+-------+------+
| col1  | col2 |
+-------+------+
| 00001 |   10 |
| 00002 |   20 |
| 00003 |   30 |
| 00004 |   40 |
| 00005 |   50 |
| 00006 | NULL |
+-------+------+
6 rows in set (0.00 sec)

mysql> SELECT col1,col2 FROM tab WHERE col2 NOT BETWEEN 20 AND 40;
+-------+------+
| col1  | col2 |
+-------+------+
| 00001 |   10 |
| 00005 |   50 |
+-------+------+
2 rows in set (0.00 sec)

BETWEEN:日付を範囲指定して検索する方法

日付型の列の値についても、BETWEEN演算子を使うことで範囲指定して検索することが出来ます。

BETWEEN演算子の基本的な使い方は次の通りです。
指定した列の値が値1以上かつ値2以下の値となるレコードを検索します。

SELECT 列名 FROM 表名 WHERE 列 BETWEEN 値1 AND 値2;

日付型(DATE型)の列と比較する値は次のSQLのように’YYYY-MM-DD’として指定します。

SELECT * FROM tab1 WHERE col2 BETWEEN '2010-10-10' AND '2020-10-11';

または’YYYYMMDD’としてハイフンなしで値を指定します。

SELECT * FROM tab1 WHERE col2 BETWEEN '20101010' AND '20201011';