Amazon Redshift中的十六进制字符串到整数转换

Sim*_*Sim 7 sql postgresql hex amazon-web-services amazon-redshift

Amazon Redshift基于Pargccel,它基于Postgres.根据我的研究,似乎在Postgres中执行十六进制字符串到整数转换的首选方法是通过位字段,如本答案中所述.

对于bigint,这将是:

select ('x'||lpad('123456789abcdef',16,'0'))::bit(64)::bigint
Run Code Online (Sandbox Code Playgroud)

不幸的是,这在Redshift上失败了:

ERROR: cannot cast type text to bit [SQL State=42846] 
Run Code Online (Sandbox Code Playgroud)

还有哪些方法可以在Postgres 8.1ish中执行此转换(接近Redshift兼容级别)?Redshift不支持UDF,数组,正则表达式函数或集生成函数都不支持...

Dea*_*ean 8

看起来他们在某些时候为此添加了一个函数:STRTOL

句法

STRTOL(num_string,base)

返回类型

BIGINT.如果num_string为null,则返回NULL.

例如

SELECT strtol('deadbeef', 16);
Run Code Online (Sandbox Code Playgroud)

返回: 3735928559