sql >> Databáze >  >> RDS >> PostgreSQL

Bitové operátory PostgreSQL s proměnným bitem nemohou AND bitové řetězce různých velikostí

Chování bit PostgreSQL a bit varying typů je mimořádně neužitečné, protože odmítá rozšiřovat bitová pole pro operace a pro přetypování je prodlužuje doprava místo toho, aby je rozšiřovala doleva.

Pro Pg by dávalo smysl, aby před operací AND nebo OR rozšířil menší operand doleva o nuly, než aby selhal.

Přetypování nelze použít na bit(n) získat stejné délky, protože z nějakého šíleného důvodu přetypování na bit(n) pravé podložky argument, takže je k ničemu téměř ve všech situacích.

Můžete použít něco jako lpad($1::text, greatest(length($1), length($2)),'0')::bit varying k levému rozšíření bitového pole s nulami na větší ze dvou délek. Je to těžkopádné, ale půjde to. Doporučil bych napsat funkce wrapper, které budou obsahovat nepořádek.

Případně zvažte úpravu bit kód podpory v src/backend/utils/adt/varbit.c pro přidání funkcí do levého rozšiřujícího a levého zkráceného bitového pole a funkcí pro provádění porovnávání s levým rozšířením. Na základě stávajícího kódu by to mělo být docela snadné.



  1. Sbíráte velké statistické soubory pomocí pg_stat_statements?

  2. Dotaz obsahující vnější spojení se v Oracle 12c chová odlišně

  3. Převeďte razítko MySql DateTime do formátu Datum v JavaScriptu

  4. Zjistěte typ dat vrácených sloupců v sadě výsledků na serveru SQL Server