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