Re: [GENERAL] Comparing bit in an integer field

2009-11-16 Thread Thom Brown
2009/11/16 Amitabh Kant amitabhk...@gmail.com:
 Hello

 I need to compare the bit values of a integer field in my table. For
 example, I have a table called t1 with just one field a1 having
 following values:

 a1
 ==
 0
 12
 8
 0
 1
 10
 7
 19

 I am trying to fetch all records where the 3rd binary bit is 1, which from
 the above example should be 12 (1100) and 7 (0111). If I convert the
 values to binary and store it as string, I can easily compare them using
 substr, but would rather like to retain the integer field. I have tried
 using the get_bit function, but it seems my understanding of the function is
 not correct.

 I would appreciate any help in this regard.


 Amitabh


There's probably a clean way of doing this, but you could do:

SELECT a1
FROM t1
WHERE (a1::bit(10)  4::bit(10))::int = 4;

 a1

 12
  7
(2 rows)

Regards

Thom

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] Comparing bit in an integer field

2009-11-16 Thread A. Kretschmer
In response to Amitabh Kant :
 Hello
 
 I need to compare the bit values of a integer field in my table. For 
 example, I
 have a table called t1 with just one field a1 having following values:
 
 a1
 ==
 0
 12
 8
 0
 1
 10
 7
 19
 
 I am trying to fetch all records where the 3rd binary bit is 1, which from the
 above example should be 12 (1100) and 7 (0111). If I convert the 
 values
 to binary and store it as string, I can easily compare them using substr, but
 would rather like to retain the integer field. I have tried using the get_bit
 function, but it seems my understanding of the function is not correct.

test=# select * from t1;
 a1

  0
 12
  8
  0
  1
 10
  7
 19
(8 rows)

test=*# select a1 from t1 where (a12)::bit = B'1';
 a1

 12
  7
(2 rows)


Regards, Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: - Header)
GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431  2EB0 389D 1DC2 3172 0C99

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] Comparing bit in an integer field

2009-11-16 Thread Thom Brown
2009/11/16 A. Kretschmer andreas.kretsch...@schollglas.com:
 In response to Amitabh Kant :
 Hello

 I need to compare the bit values of a integer field in my table. For 
 example, I
 have a table called t1 with just one field a1 having following values:

 a1
 ==
 0
 12
 8
 0
 1
 10
 7
 19

 I am trying to fetch all records where the 3rd binary bit is 1, which from 
 the
 above example should be 12 (1100) and 7 (0111). If I convert the 
 values
 to binary and store it as string, I can easily compare them using substr, but
 would rather like to retain the integer field. I have tried using the get_bit
 function, but it seems my understanding of the function is not correct.

 test=# select * from t1;
  a1
 
  0
  12
  8
  0
  1
  10
  7
  19
 (8 rows)

 test=*# select a1 from t1 where (a12)::bit = B'1';
  a1
 
  12
  7
 (2 rows)


Ah, bit-shifting.  Told you there'd be a cleaner way ;)

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] Comparing bit in an integer field

2009-11-16 Thread Amitabh Kant
On Mon, Nov 16, 2009 at 7:53 PM, A. Kretschmer 
andreas.kretsch...@schollglas.com wrote:

 In response to Amitabh Kant :

 test=# select * from t1;
  a1
 
  0
  12
  8
  0
  1
  10
  7
  19
 (8 rows)

 test=*# select a1 from t1 where (a12)::bit = B'1';
  a1
 
  12
  7
 (2 rows)


 Regards, Andreas


Thanks. That should solve my problem.

Amitabh