MariaDBでは、MAKE_SET()
は、引数で指定された値に基づいて設定値を返す文字列関数です。
セットは、コンマ(,
)で区切られた部分文字列を含む文字列です。 )文字。
構文
構文は次のようになります:
MAKE_SET(bits,str1,str2,...)
ここで、str1, str2,...
1つ以上の文字列値とbits
これらの文字列値のどれをセットに含めるかを指定します。
MAKE_SET()
bits
に対応するビットを持つ文字列で構成される設定値を返します セットする。
例
デモンストレーションの例を次に示します。
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
結果:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
バイナリ表現を使用していることに注意してください 後続の引数で該当する文字列を返す最初の引数の。したがって、最初の引数は1であり、項目1に対応していると言うほど単純ではありません。
これが私が何を意味するかを説明する別の例です:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
結果:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
仕組み
次のことを考慮してください:
SELECT
BIN(1) AS '1',
BIN(2) AS '2',
BIN(3) AS '3',
BIN(4) AS '4',
BIN(5) AS '5',
BIN(6) AS '6',
BIN(7) AS '7',
BIN(8) AS '8',
BIN(9) AS '9',
BIN(10) AS '10';
結果(垂直出力を使用):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
ここでは、BIN()
を使用します 各数値のバイナリ値を返す関数。
4
のバイナリ表現であることがわかります 100
です 。 MAKE_SET()
に適用するには、これを逆方向に視覚化する必要があります。 上記の例。この場合、これは3桁のバイナリ値であり、右端の桁が最初の文字列に対応し、次の桁が2番目の文字列に対応し、左端の桁が3番目の文字列に対応します。
バイナリ用語では、1
は「オン」で0
「オフ」です。 MAKE_SET()
関数は、対応する1
を持つ文字列のみを返します バイナリ値で。したがって、上記の例では3番目の文字列が返されます。
別の値を使用した別の例を次に示します。
SELECT MAKE_SET(10, 'a','b','c','d');
結果:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
この場合、バイナリ値は1010
です。 。したがって、2つの1
があります s、2番目と4番目の文字列引数に対応します。
概念をさらに実証するためのいくつかの例を次に示します。
SELECT
MAKE_SET(1, 'a','b','c','d') AS '1',
MAKE_SET(2, 'a','b','c','d') AS '2',
MAKE_SET(3, 'a','b','c','d') AS '3',
MAKE_SET(4, 'a','b','c','d') AS '4',
MAKE_SET(5, 'a','b','c','d') AS '5',
MAKE_SET(6, 'a','b','c','d') AS '6',
MAKE_SET(7, 'a','b','c','d') AS '7',
MAKE_SET(8, 'a','b','c','d') AS '8',
MAKE_SET(9, 'a','b','c','d') AS '9',
MAKE_SET(10, 'a','b','c','d') AS '10';
結果(垂直出力を使用):
1: a 2: b 3: a,b 4: c 5: a,c 6: b,c 7: a,b,c 8: d 9: a,d 10: b,d
別の文字列セットを使用した例を次に示します。
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
結果(垂直出力を使用):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
複数のバイナリ値
パイプ記号を使用します(|
)セットに複数の値を含めるには:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
結果:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
ヌル値
文字列値がnull
の場合 、その後、結果から省略されます:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
結果:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+