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」で表現するフラグデータを複数持ち、
そのフラグデータの組み合わせを数値で判断する場合に使えそうです。