4

MySQL で一連のバイナリ フィールドを連結し、結果を DECIMAL として返すクエリを作成しようとしています。

例えば:

SELECT CONCAT (setting1, setting2, setting3) AS settings;

私にくれたかもしれません:

101
111
110

この値を、対応する DECIMAL 値を与える関数 (convert? cast?) に渡したい:

5
7
6

私はすでに and のいくつかの組み合わせを試しましたcast()convert()、まだクラックしていません。

4

4 に答える 4

4

CONV(BINARY(CONCAT(設定1、設定2))、2、10)

于 2013-01-23T04:18:33.657 に答える
1

試していませんが、試してみてください。

まず、入力を 6 としましょう。

INSERT INTO Table (FieldTest) VALUES (UNHEX(CONV(6, 10, 16)))
SELECT CONV(HEX(UNHEX(6)), 16, 10)

フィールド付き

SELECT CONV(HEX(FieldTest), 16, 10))

UNHEX データを 16 進数から 2 進数に変換します。

CONV は、あるベースから別のベースにデータを変換します。

ここでは、基数 10 を 16 に (10 進数を 16 進数に) 変換してから、16 進数をビンに変換します。

選択すると、BINからHEX、HEXからBINを実行します

CONV(6, 10, 2)実際には、読むときはその逆を行うことができます。

于 2012-06-14T14:33:04.607 に答える
0

バイナリで累乗計算を試すことができます

SELECT setting1 * 4 + setting2 * 2 + setting3 * 1 AS settings;

しかし、それが何をしているのか

SELECT setting1 * POW(2, 2) + setting2 * POW(2, 1) + setting3 * POW(2, 0) AS settings;

2^0 は右端のビットを表します

2^1 は 2 番目など...

将来、MySQL にバイナリ列がある場合、それらを 1 つに結合する方が簡単かもしれません [順序を覚えておくために列にコメントを残してください]

次のようにデータベースにデータを追加します

INSERT INTO settings (setting) VALUES (setting1 * 4 + setting2 * 2 + setting1 * 1);

で単一のものを引き出すと SELECT setting & 2 FROM settings; 、setting2の値が返されます。

Bitwise Functionsを調べてください。

于 2012-07-09T19:51:17.677 に答える