Top > SQL 関数一覧 (A‐D) > BITAND、BITOR、BITXOR

2つの数値をビットデータとして扱いビット演算を行なう

syntax

BITAND ( number1 , number2 )
return [ NUMBER ]

parameter

number1数値式 (NUMBER 型)
number2数値式 (NUMBER 型)

return

  • 数値式 number1number2 の論理積を NUMBER 型で戻す

avail

  • SQL および PL/SQL の両方で使用可能。

BITAND 関数の内容

数値式 number1number1 を バイナリデータとしてビットにし、その論理積(AND)処理を行い。その結果を数値として戻す。
SQL 関数として BITAND 以外のビット演算は用意されていない。パッケージとしては UTL_RAW パッケージが利用できる。

使用方法の代表的な例としては DECODE と BIN_TO_NUM 関数を併用して ON になっているビットの検出するなどの用途がある。これはデータウェアハウスなどにおける非正規化データの格納などに用いられる手法でもある。

BITAND 使用例

SQL> select 'pattern match' from dual
 where BITAND(bin_to_num(1,0,1), bin_to_num(0,0,1)) <> 0 ;
--------------------------
PATTERN MATCH

DECODE 関数BIN_TO_NUM 関数 を使った例

SQL> select
     decode(BITAND(bin_to_num(1,0,1),1), 1, '**1', '**0') "b1",
     decode(BITAND(bin_to_num(1,0,1),2), 2, '*1*', '*0*') "b2",
     decode(BITAND(bin_to_num(1,0,1),4), 4, '1**', '0**') "b3"
from dual;
 
 B1     B2    B3
 ------ ----- ------
 **1   *0*   1**

ビット演算 (OR、XOR)

前述どおり 論理和(BITOR) と 排他的論理和(BITXOR) は標準関数で用意されていないが UTL_RAW で代用することが可能。

BITOR 関数(論理和:2つの数値を OR でビット演算して戻す)

入力は自然数のみ有効 UTL_RAW パッケージを使う

書式
BITOR( expr1 , expr2 )

自然数の数値式 expr1expr1 をビット単位に論理和(OR) 処理を行い、その数値を戻す。

-- BITOR
CREATE OR REPLACE FUNCTION RIVUS.BITOR( P_BITS1 IN NATURAL, P_BITS2 IN NATURAL )
RETURN NATURAL
IS
BEGIN
	RETURN UTL_RAW.CAST_TO_BINARY_INTEGER(
		UTL_RAW.BIT_OR(
			UTL_RAW.CAST_FROM_BINARY_INTEGER(P_BITS1),
			UTL_RAW.CAST_FROM_BINARY_INTEGER(P_BITS2)
	 	)
 	);
END;
/

BITXOR 関数(排他的論理和:2つの数値を XOR でビット演算して戻す)

書式
BITXOR ( expr1 , expr2 )

自然数の数値式 expr1expr2 をビット単位に排他的論理和(eXclusive OR) 処理を行い、その数値を戻す。

-- BITXOR
CREATE OR REPLACE FUNCTION RIVUS.BITXOR( P_BITS1 IN NATURAL, P_BITS2 IN NATURAL ) 
RETURN NATURAL 
IS
BEGIN
	RETURN UTL_RAW.CAST_TO_BINARY_INTEGER(
		UTL_RAW.BIT_XOR(
			UTL_RAW.CAST_FROM_BINARY_INTEGER(P_BITS1),
			UTL_RAW.CAST_FROM_BINARY_INTEGER(P_BITS2)
	 	)
 	);
END;
/
 


PL/SQL パッケージ - ビット操作関連

  • UTL_RAW.BIT_COMPLEMENT 関数(ビットの補数)

SQL 関数 - ビット操作関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)