PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL Operatory bitowe ze zmiennymi bitami nie mogą ORAZ łańcuchów bitowych o różnych rozmiarach

Zachowanie bit PostgreSQLa i bit varying typy są niezmiernie nieprzydatne, ponieważ odmawiają rozszerzania pól bitowych dla operacji i rozszerzają je w prawo dla rzutowania zamiast w lewo.

Dla Pg sensowne byłoby wydłużenie w lewo mniejszego operandu o zera przed operacją AND lub OR, zamiast niepowodzenia.

Nie możesz użyć rzutowania na bit(n) aby uzyskać te same długości, ponieważ z jakiegoś szalonego powodu rzutowanie na bit(n) prawy klawisze argument, czyniąc go bezużytecznym w prawie wszystkich sytuacjach.

Możesz użyć czegoś takiego jak lpad($1::text, greatest(length($1), length($2)),'0')::bit varying aby przedłużyć z lewej strony pole bitowe zerami do większej z dwóch długości. To kłopotliwe, ale zadziała. Zalecam napisanie funkcji opakowujących, aby powstrzymać bałagan.

Alternatywnie rozważ zmodyfikowanie bit kod wsparcia w src/backend/utils/adt/varbit.c do dodawania funkcji do pól bitowych rozszerzanych w lewo i przycinanych w lewo oraz funkcji do wykonywania porównań rozszerzających w lewo. Powinno to być całkiem proste w oparciu o istniejący kod.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przechowywać DateTimeOffset w PostreSQL?

  2. Jak działa KOPIUJ i dlaczego jest o wiele szybszy niż WSTAWIANIE?

  3. PostgreSQL:czas utworzenia tabeli

  4. Zainstaluj sortowanie utf8 w PostgreSQL

  5. Wstaw obraz do bazy postgresql