Hatena::Grouppostgresql

PostgreSQL 雑記 このページをアンテナに追加 RSSフィード

2010-06-09from_hex() このエントリーを含むブックマーク このエントリーのブックマークコメント

PostgreSQL には to_hex() で 数値→16進数文字列 は変換できるのに、16進数文字列→数値 の逆変換ってできないんでしたっけ? 仕方ないので↓な関数を自作してみたり。

-- 0-9A-Fa-f 以外の文字はエラーでなく 0 扱い。
CREATE FUNCTION from_hex(text) RETURNS bigint AS
$$
SELECT (sum((16::numeric ^ (length($1) - i)) *
        position(upper(substring($1 from i for 1)) in '123456789ABCDEF')))::bigint
  FROM generate_series(1, length($1)) AS t(i)
$$
LANGUAGE sql IMMUTABLE STRICT;

L_starL_star2010/06/10 06:08先生!decode(text,'hex')は出力がbyteaだから駄目ですかそうですか。

pgsqlpgsql2010/06/10 06:30decode() だと受け付けるパターンが限定されているようです。
postgres=# SELECT decode('a', 'hex');
ERROR: invalid hexadecimal data: odd number of digits
postgres=# SELECT decode('aa', 'hex');
decode
--------
\252