PostgreSQL で理解できた限りでは、hex または bit から smallint またはその逆に変換することはできません。
int2 から bit16 に変換するには、次のようにします。
select ((((-32768)::int2)::int4)::bit(32)<<16)::bit(16)
Result: 1000000000000000
しかし、どうすれば逆にできるのでしょうか?
最上位ビットを設定する int2 フラグがあります。しかし、int2 でビット操作を使用できないため、前に int4 に変換する必要があるため、これを行うことができます。このようなもの:
SELECT flags,
(flags | x'8000'::integer) myInt2Result
FROM MyTable;
次に、myInt2Result を使用して他のプロセスを呼び出します。試しやすくするために、flags が値 2560 の smallint であると想像してみましょう。
SELECT 2560::int2, (2560::int2 | x'8000'::integer)
RESULT: 35328
これは +32767 よりも大きく、PostgreSQL に unsigned smallint がないため、直接 int2 (範囲外の smallint) にキャストできません。
また、PostgreSQLではできません
x'8000'::int2 (it would be really handy)
OR
x'8000'::integer::int2 (smallint out of range)
PostgreSQLでこれを行う方法はありますか、それとも自分でint4をint2に変換する必要がありますか(ビットを考慮して)?