を使用して、どのビットが設定されているかを調べようとしますBITAND
。
データベースでは、ユーザー権限を BIGINT1101111
やのように保存します1110001
。
サンプルの場合、3 番目のビットが設定されている場合、テーブル内の要素を見つける必要があります。この場合。クエリは最初のものを見つける必要があります。
どうやってやるの??
Select * from USERRIGHTS
WHERE BITAND(Rightmask , 4) = 1 ??????
を使用して、どのビットが設定されているかを調べようとしますBITAND
。
データベースでは、ユーザー権限を BIGINT1101111
やのように保存します1110001
。
サンプルの場合、3 番目のビットが設定されている場合、テーブル内の要素を見つける必要があります。この場合。クエリは最初のものを見つける必要があります。
どうやってやるの??
Select * from USERRIGHTS
WHERE BITAND(Rightmask , 4) = 1 ??????
解決策を見つけました。右のマスクを「1101111」という形式で保存するのはばかげていました。データを 10 進形式で保存する必要があります。この場合、1101111 = 111 (10 進数) または 1110001 = 113 です。アプリケーションで正しいマスクを 10 進数に変換し、その形式で保存しました。
そして、ビット位置が設定されているかどうかを確認することができました。
このクエリは、私が望むすべてのエントリを提供します:-):
Select * from USERRIGHTS WHERE BITAND(Rightmask , 16) = 16 (3 番目のビット位置は、右から5 番目のビット位置です。この値は、ビット演算に使用する必要があります。2^(5-1) = 16)
Linux、UNIX、および Windows DB2 プラットフォームでは、バージョン 9.5でビット演算子が導入されました。