sql >> データベース >  >> RDS >> PostgreSQL

ビットが変化するPostgreSQLのビット演算子は、異なるサイズのビット文字列をANDすることはできません

    PostgreSQLのbitの動作 およびbit varying タイプは、操作のためにビットフィールドを拡張することを拒否する方法で非常に役に立たず、キャストのためにビットフィールドを左に拡張するのではなく、右に拡張します。

    Pgが失敗するのではなく、ANDまたはOR演算の前に、小さい方のオペランドをゼロで左に拡張することは理にかなっています。

    bit(n)へのキャストは使用できません 同じ長さを取得するには、なんらかの理由でbit(n)にキャストするためです。 右パッド 議論は、ほとんどすべての状況で役に立たないものにします。

    lpad($1::text, greatest(length($1), length($2)),'0')::bit varyingのようなものを使用できます 左に-ゼロのあるビットフィールドを2つの長さの大きい方に拡張します。面倒ですが、うまくいきます。混乱を含むラッパー関数を作成することをお勧めします。

    または、bitを変更することを検討してください src/backend/utils/adt/varbit.cのサポートコード 左拡張ビットフィールドと左切り捨てビットフィールドに関数を追加し、左拡張比較を実行する関数を追加します。既存のコードに基づいて、かなり簡単なはずです。



    1. 行を数えるためのphpを使用した私のSQLのベストプラクティス

    2. SQL主キーは「0」を受け入れることができますか?

    3. DISTINCT呼び出し用のPostgreSQLタイプ(ポイント)のカスタム等式演算子の作成

    4. PostgreSQLのフォールトトレランスの進化:タイムトラベル