Re: BITWISE AND
Date: 23 Feb 1995 13:35:37 GMT
Message-ID: <3ii2v9$4sj_at_nuclear.microserve.net>
Karl Zdero (karlz_at_pst.bt.co.uk) wrote:
: I have a conversion task to perform. One of the fields contains a
: series of 1's and 0's ie: 10011011.
:
: This field represents a number of flags that are turned on!
: Now, I could store this field as a numeric column (in this case the
: value would be 155 as bitpos 1,4,5,7 and 8 are turned on.
: How would I in SQL, determine which flags are turned on in a SELECT
: statement?
: Something along the lines of a BITWISE AND operation.
: ie: To determine if flag number 4 is turned on I would AND the colums
: value with 4 and test the result is 4.
: As far as I know, BITWISE ops are not possible in SQL.
Well, there is an undocumented function in Oracle (was in 6 and is in 7) called BITAND which may do what you need. In you example, you could have a numeric column COLN in table TABA and the test would be as follows:
SELECT BITAND(COLN,1) FROM TABA; ** Check for Bit 1 SELECT BITAND(COLN,2) FROM TABA; ** Check for Bit 2 SELECT BITAND(COLN,4) FROM TABA; ** Check for Bit 3.....
SELECT BITAND(COLN,128) FROM TABA; ** Check for BIT 8
In your example of using 155 for COLN, then the SELECTs that check for BITS 1, 2, 4, 5, and 8 would return non-zero values, while the others would return 0. This correctly indicates the bits for 155.
Have fun with Oracle - they do!
--
+------------+
/| +--------+ |
//| | //| | Joseph P. Bennett
//|| |_____///| | Systems Consultant
//_|| |_____// | | bennettj_at_ugly.microserve.net
||_|| |____ ||_| |
|| || | || |
|| /+-----| ||---+ "There are a lot of dumb people with powerful tools."
||// _____| ||/ / Jonah Seiger, 1994
| / /_______| /
|/__________| /
Received on Thu Feb 23 1995 - 14:35:37 CET
