Documentation PostgreSQL 14.19 » 
Langage SQL » 
Fonctions et opérateurs » 
Fonctions et opérateurs pour les chaînes de bit9.6. Fonctions et opérateurs pour les chaînes de bit
  Cette section décrit les fonctions et opérateurs pour examiner et
  manipuler les chaînes de bit, c'est-à-dire des valeurs de type
  bit et bit varying. (Alors que seul le type
  bit est mentionné dans ces tables, les valeurs de type
  bit varying peuvent être utilisées de façon interchangeable.)
  Les chaînes de bit supportent les opérateurs de comparaison habituels
  indiqués dans Tableau 9.1, ainsi que
  les opérateurs montrés dans Tableau 9.14.
 
Tableau 9.14. Opérateurs pour les chaînes de bit
| 
       Opérateur
       
       Description
       
       Exemple(s)
       | 
|---|
| 
       bit||bit→bit 
       Concaténation
       
       B'10001' || B'011'→10001011 | 
| 
       bit&bit→bit 
       AND bit à bit (les arguments doivent être de même longueur)
       
       B'10001' & B'01101'→00001 | 
| 
       bit|bit→bit 
       OR bit à bit (les arguments doivent être de même longueur)
       
       B'10001' | B'01101'→11101 | 
| 
       bit#bit→bit 
       OR exclusif bit à bit (les arguments doivent être de même longueur)
       
       B'10001' # B'01101'→11100 | 
| 
       ~bit→bit 
       NOT bit à bit
       
       ~ B'10001'→01110 | 
| 
       bit<<integer→bit 
       Décalage à gauche bit à bit
       (la longueur de la chaîne est préservée)
       
       B'10001' << 3→01000 | 
| 
       bit>>integer→bit 
       Décalage à droite bit à bit
       (la longueur de la chaîne est préservée)
       
       B'10001' >> 2→00100 | 
  Certaines des fonctions disponibles pour les chaînes binaires sont aussi
  disponibles pour les chaînes de bit, comme indiquées dans Tableau 9.15.
 
Tableau 9.15. Fonctions pour les chaînes de bit
| 
       Fonction
       
       Description
       
       Exemple(s)
       | 
|---|
| 
      
      bit_count(bit)
      →bigint 
      Retourne le nombre de bits initialisés dans la chaîne de bits (aussi appelée
      « popcount »).
      
      bit_count(B'10111')→4 | 
| 
       
       bit_length(bit)
       →integer 
       Renvoie le nombre de bits d'une chaîne de bit.
       
       bit_length(B'10111')→5 | 
| 
       
       
       length(bit)
       →integer 
       Renvoie le nombre de bits d'une chaîne de bit.
       
       length(B'10111')→5 | 
| 
       
       octet_length(bit)
       →integer 
       Renvoie le nombre d'octets d'une chaîne de bit.
       
       octet_length(B'1011111011')→2 | 
| 
       
       overlay(bitsbitPLACINGnewsubstringbitFROMstartinteger[FORcountinteger] )
       →bit 
       Remplace la sous-chaîne de bitscommençant austart-ième bit et s'étendant surcountbits avecnewsubstring. Sicountest omis, sa valeur par défaut est la longueur denewsubstring. 
       overlay(B'01010101010101010' placing B'11111' from 2 for 3)→0111110101010101010 | 
| 
       
       position(substringbitINbitsbit)
       →integer 
       Renvoie la position de départ de substringdansbits, ou zéro s'il n'est pas présent. 
       position(B'010' in B'000001101011')→8 | 
| 
       
       substring(bitsbit[FROMstartinteger] [FORcountinteger] )
       →bit 
       Extrait la sous-chaîne de bitscommençant austart-ième bit s'il est précisé, et s'arrêtant
       aprèscountbits s'il est précisé. Il est
       requis qu'au moins soitstartsoitcountsoient renseignés. 
       substring(B'110010111111' from 3 for 2)→00 | 
| 
       
       get_bit(bitsbit,ninteger)
       →integer 
       Extrait le n-ième bit de la chaîne de bits.
       Le premier bit (le plus à gauche) est le bit 0. 
       get_bit(B'101010101010101010', 6)→1 | 
| 
       
       set_bit(bitsbit,ninteger,newvalueinteger)
       →bit 
       Initialise le n-ième bit dans la chaîne de bit
       avecnewvalue. Le premier bit (le plus à
       gauche) est le bit 0. 
       set_bit(B'101010101010101010', 6, 0)→101010001010101010 | 
  De plus, il est possible de convertir les valeurs intégrales à partir ou
  vers le type bit. Convertir un entier en bit(n)
  copie les n bits les plus à droite. Convertir un entier
  en une chaîne de bits, dont la largeur est plus importante que l'entier
  lui-même, l'étendra sur la gauche. Quelques exemples :
  
44::bit(10)                    0000101100
44::bit(3)                     100
cast(-44 as bit(12))           111111010100
'1110'::bit(4)::integer        14
  
  Il faut noter que la conversion vers simplement « bit »
  signifie une conversion vers bit(1), et ne renverra
  donc que le bit le moins significatif de l'entier.