MySQL find_in_set()関数
5732 ワード
MySQL findから転載in_set()関数
MySQL FIND_IN_SET関数の概要
MySQLには、カンマで区切られた文字列のリストで指定された文字列の場所を検索できるの最初のパラメータ の2番目のパラメータ
MySQL FIND_IN_SET例
次に、MySQL
MySQL FIND_IN_SET:簡単な例
次の文は、文字
次の文は、
次の文は、2番目のパラメータが空の文字列であるため、
次の文は、最初のパラメータが
2番目のパラメータが
MySQL FIND_IN_SET:テーブルからのデータ照会例
プレゼンテーションの目的で、
まず、次の文を使用して
SQL
次に、
第三に、井戸の底に
上記のクエリ文を実行すると、次の結果が得られます.
MySQL NOT FIND_IN_SET例
たとえば、黒い(
上記の文を実行して、次の結果を得ます.
MySQL FIND_IN_SET関数とIN演算子
IN演算子は、値が指定値リストに一致するかどうかを決定します.たとえば、
上記のクエリ文を実行すると、次の結果が得られます.
したがって、
値をデータベースの値リストと一致させるには、
このチュートリアルでは、
MySQL FIND_IN_SET関数の概要
MySQLには、カンマで区切られた文字列のリストで指定された文字列の場所を検索できる
FIND_IN_SET()
という内蔵文字列関数が用意されています.FIND_IN_SET()
関数の構文を説明します.FIND_IN_SET(needle,haystack);
FIND_IN_SET()
関数は、2つのパラメータを受け入れます.needle
は、検索する文字列です.haystack
は、検索するカンマで区切られた文字列のリストです.FIND_IN_SET()
関数は、パラメータの値に基づいて整数またはNULL
の値を返します.needle
またはhaystack
がNULL
である場合、関数はNULL
の値を返します.needle
がhaystack
にない場合、またはhaystack
が空の文字列である場合、ゼロが返されます.needle
がhaystack
の場合、正の整数が返されます.needle
にカンマ(,
)が含まれている場合、この関数は正常に動作しません.さらに、needle
が定数文字列であり、haystack
がSET
のタイプの列である場合、MySQLはビット算術最適化を使用します.MySQL FIND_IN_SET例
次に、MySQL
FIND_IN_SET
の動作原理を理解し、学習する例を挙げます.MySQL FIND_IN_SET:簡単な例
次の文は、文字
2
が'y'
文字列の2番目の位置であるため、'x,y,z'
を返します.mysql> SELECT FIND_IN_SET('y','x,y,z');
+--------------------------+
| FIND_IN_SET('y','x,y,z') |
+--------------------------+
| 2 |
+--------------------------+
1 row in set
次の文は、
0
が'a'
文字列リストにないため、'x,y,z'
を返します.mysql> SELECT FIND_IN_SET('a','x,y,z');
+--------------------------+
| FIND_IN_SET('a','x,y,z') |
+--------------------------+
| 0 |
+--------------------------+
1 row in set
次の文は、2番目のパラメータが空の文字列であるため、
0
も返します.mysql> SELECT FIND_IN_SET('a','');
+---------------------+
| FIND_IN_SET('a','') |
+---------------------+
| 0 |
+---------------------+
1 row in set
次の文は、最初のパラメータが
NULL
であるため、NULL
を返します.SELECT FIND_IN_SET(NULL,'x,y,z');
2番目のパラメータが
NULL
であるため、次の文もNULL
を返します.mysql> SELECT FIND_IN_SET('a',NULL);
+-----------------------+
| FIND_IN_SET('a',NULL) |
+-----------------------+
| NULL |
+-----------------------+
1 row in set
MySQL FIND_IN_SET:テーブルからのデータ照会例
プレゼンテーションの目的で、
divisions
という新しいテーブルが作成されます.まず、次の文を使用して
divisions
テーブルを作成します.USE testdb;
CREATE TABLE IF NOT EXISTS divisions (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(25) NOT NULL,
belts VARCHAR(200) NOT NULL
);
SQL
次に、
divisions
テーブルに数行のデータを挿入します.INSERT INTO divisions(name,belts)
VALUES ('O-1','white,yellow,orange'),
('O-2','purple,green,blue'),
('O-3','brown,red,black'),
('O-4','white,yellow,orange'),
('O-5','purple,green,blue'),
('O-6','brown,red'),
('O-7','black'),
('O-8','white,yellow,orange'),
('O-9','purple,green,blue'),
('O-10','brown,red');
第三に、井戸の底に
red
ベルトを受け入れる部門は、FIND_IN_SET
関数を使用して、以下のようにすることができる.SELECT
name, belts
FROM
divisions
WHERE
FIND_IN_SET('red', belts);
上記のクエリ文を実行すると、次の結果が得られます.
+------+-----------------+
| name | belts |
+------+-----------------+
| O-3 | brown,red,black |
| O-6 | brown,red |
| O-10 | brown,red |
+------+-----------------+
3 rows in set
MySQL NOT FIND_IN_SET例
FIND_IN_SET()
関数は、2番目のパラメータで1番目のパラメータが見つからない場合に0
を返すためです.したがって、NOT
演算子を使用して、FIND_IN_SET()
関数が返す結果値を否定できます.たとえば、黒い(
black
)ベルトを受け入れない部門を見つけるには、次の文を使用します.SELECT
name, belts
FROM
divisions
WHERE
NOT FIND_IN_SET('black', belts);
上記の文を実行して、次の結果を得ます.
+------+---------------------+
| name | belts |
+------+---------------------+
| O-1 | white,yellow,orange |
| O-2 | purple,green,blue |
| O-4 | white,yellow,orange |
| O-5 | purple,green,blue |
| O-6 | brown,red |
| O-8 | white,yellow,orange |
| O-9 | purple,green,blue |
| O-10 | brown,red |
+------+---------------------+
8 rows in set
MySQL FIND_IN_SET関数とIN演算子
IN演算子は、値が指定値リストに一致するかどうかを決定します.たとえば、
O-1
またはO-2
という名前の部門を検索するには、次のようにIN
演算子を使用します.SELECT
name, belts
FROM
divisions
WHERE
name IN ('O-1' , 'O-2');
上記のクエリ文を実行すると、次の結果が得られます.
+------+---------------------+
| name | belts |
+------+---------------------+
| O-1 | white,yellow,orange |
| O-2 | purple,green,blue |
+------+---------------------+
2 rows in set
FIND_IN_SET
関数を使用して、上記のクエリと同じ結果を得ることができます.SELECT
name, belts
FROM
divisions
WHERE
FIND_IN_SET(name, 'O-1,O-2');
したがって、
column IN (x, y, z)
式はFIND_IN_SET(column, 'x,y,z')
式と同じである.IN
演算子は、カンマで区切られた任意の数のパラメータを受け入れることができます.しかし、FIND_IN_SET
関数には2つのパラメータしかありません.値をデータベースの値リストと一致させるには、
IN
演算子を使用します.また、FIND_IN_SET
関数は、データベースにカンマで区切られて格納されている値リストと値を一致させる場合に使用できます.このチュートリアルでは、
FIND_IN_SET
関数を使用して、カンマで区切られた文字列リストの文字列を検索する方法について学習しました.