Amazon Redshift基于Pargccel,它基于Postgres.根据我的研究,似乎在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,数组,正则表达式函数或集生成函数都不支持...
看起来他们在某些时候为此添加了一个函数:STRTOL
句法
STRTOL(num_string,base)
返回类型
BIGINT.如果num_string为null,则返回NULL.
例如
SELECT strtol('deadbeef', 16);
返回: 3735928559