Amazon Redshift基于基于Postgres的ParAccel。从我的研究看来,在Postgres中执行十六进制字符串到整数转换的首选方法是通过位字段,如本答案所述。
对于bigint,这将是:
select ('x'||lpad('123456789abcdef',16,'0'))::bit(64)::bigint
不幸的是,这在Redshift上失败,原因是:
ERROR: cannot cast type text to bit [SQL State=42846]
还有哪些其他方法可以在Postgres 8.1ish中执行此转换(接近Redshift的兼容性级别)?Redshift不支持UDF,数组,正则表达式函数或集合生成函数也不支持UDF …
看起来他们为此添加了一个功能:STRTOL
句法 STRTOL(num_string,base) 返回类型 BIGINT。如果num_string为null,则返回NULL。
句法
STRTOL(num_string,base)
返回类型
BIGINT。如果num_string为null,则返回NULL。
例如
SELECT strtol('deadbeef', 16);
返回值: 3735928559
3735928559