PostgreSQLでHEX文字列を符号ありの数値に変換する

HEX文字列から数値への変換処理は、PostgreSQLSQLでもできます。

4Byte(8文字)、8Byte(16文字)

4Byte、8Byteの変換は、下記Stack Overflowで回答がつけられています。
そちらを参照のこと。
stackoverflow.com

2Byte(4文字)

自分がやりたかったのは2ByteのHEX文字列変換だったので、上記回答を参考に、以下のようにすることでできました。

SELECT (((('x' || lpad(hex, 4, '0'))::bit(16))::bit(32)::int4)>>16)::int2::numeric(16,4) as short_val
FROM   (
   VALUES ('1'::text)
         ,('f')
         ,('100')
         ,('7fff')
         ,('8000')
         ,('dead')
         ,('ffff')
   ) AS t(hex);
 ||<

結果

>||
   short_val
------------
          1
         15
        256
      32767
     -32768
         -1