Oracle SQL 関数 : BIN_TO_NUM : ビット・ベクトルの数値変換
numberRet := BIN_TO_NUM( numberSrc1, numberSrc2, ... , numberSrcN ); BIN_TO_NUM 関数はビット数値データリスト numberSrc1...N を数値変換した値を返します。 ビット数値データリストは「0」と「1」のみを値として取ります。 尚、ビット数値データリストは数値で指定しますが、文字列であっても数値に変換できる場合はOKです。
以下に BIN_TO_NUM 関数の例を示します。
SQL> SELECT
2 BIN_TO_NUM(0,0,0,0,0,0,0,0) AS "0x00"
3 ,BIN_TO_NUM(0,0,0,0,0,0,0,1) AS "0x01"
4 ,BIN_TO_NUM(0,0,0,0,0,0,1,0) AS "0x02"
5 ,BIN_TO_NUM(0,0,0,0,0,0,1,1) AS "0x03"
6 ,BIN_TO_NUM(0,0,0,0,1,0,0,0) AS "0x08"
7 ,BIN_TO_NUM(1,0,0,0,0,0,0,1) AS "0x81"
8 ,BIN_TO_NUM(1,0,0,1,1,0,0,0) AS "0x98"
9 ,BIN_TO_NUM(1,1,0,0,1,1,0,0) AS "0xCC"
10 ,BIN_TO_NUM(1,1,1,0,0,0,0,0) AS "0xE0"
11 ,BIN_TO_NUM(1,1,1,1,1,1,1,1) AS "0xFF"
12 FROM DUAL;
0x00 0x01 0x02 0x03 0x08 0x81 0x98 0xCC 0xE0 0xFF
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 1 2 3 8 129 152 204 224 255
なお、リストに文字列を含んだ場合の例を示します。
SQL> SELECT
2 BIN_TO_NUM(1,'0',0,0,0,0,0,0) AS "0x00"
3 ,BIN_TO_NUM('1','1',1,0,0,0,0,0) AS "0xE0"
4 FROM DUAL;
0x00 0xE0
---------- ----------
128 224
ビット数値データリストはリテラル(直値)だけではなく、テーブルのカラム値も指定できます。
以下は、テーブルを仮想的に「DUAL」表から3行のビットデータを生成したものを BIN_TO_NUM 関数で扱っています。
当然、リアルなテーブルのカラムでも指定可能です。
SQL> SELECT
2 BIN_TO_NUM(BIT1, BIT2, BIT3)
3 FROM (
4 SELECT 0 AS BIT1,1 AS BIT2,0 AS BIT3 FROM DUAL
5 UNION
6 SELECT 1 AS BIT1,1 AS BIT2,0 AS BIT3 FROM DUAL
7 UNION
8 SELECT 0 AS BIT1,1 AS BIT2,1 AS BIT3 FROM DUAL
9 ) TX;
BIN_TO_NUM(BIT1,BIT2,BIT3)
--------------------------
2
3
6
BIN_TO_NUM 関数の使い道ですが、テーブルに「0」「1」で表現するフラグデータを複数持ち、
そのフラグデータの組み合わせを数値で判断する場合に使えそうです。