Oracle SQL 関数 : BIN_TO_NUM : ビット・ベクトルの数値変換
numberRet := BIN_TO_NUM( numberSrc1, numberSrc2, ... , numberSrcN );
BIN_TO_NUM 関数はビット数値データリスト numberSrc1...N を数値変換した値を返します。
ビット数値データリストは「0」と「1」のみを値として取ります。
尚、ビット数値データリストは数値で指定しますが、文字列であっても数値に変換できる場合はOKです。
以下に BIN_TO_NUM 関数の例を示します。
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" |
0x00 0x01 0x02 0x03 0x08 0x81 0x98 0xCC 0xE0 0xFF |
0 1 2 3 8 129 152 204 224 255 |
なお、リストに文字列を含んだ場合の例を示します。
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" |
ビット数値データリストはリテラル(直値)だけではなく、テーブルのカラム値も指定できます。
以下は、テーブルを仮想的に「DUAL」表から3行のビットデータを生成したものを BIN_TO_NUM 関数で扱っています。
当然、リアルなテーブルのカラムでも指定可能です。
2 BIN_TO_NUM(BIT1, BIT2, BIT3) |
4 SELECT 0 AS BIT1,1 AS BIT2,0 AS BIT3 FROM DUAL |
6 SELECT 1 AS BIT1,1 AS BIT2,0 AS BIT3 FROM DUAL |
8 SELECT 0 AS BIT1,1 AS BIT2,1 AS BIT3 FROM DUAL |
BIN_TO_NUM(BIT1,BIT2,BIT3) |
BIN_TO_NUM 関数の使い道ですが、テーブルに「0」「1」で表現するフラグデータを複数持ち、
そのフラグデータの組み合わせを数値で判断する場合に使えそうです。
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。