如何在 Redshift 中将十六进制数转换为二进制数?
Posted
技术标签:
【中文标题】如何在 Redshift 中将十六进制数转换为二进制数?【英文标题】:How do I convert a hexadecimal number into binary in Redshift? 【发布时间】:2019-07-19 16:59:58 【问题描述】:我正在尝试将十六进制数字转换为二进制。我还没有找到可以工作的红移函数。
我尝试了以下两个功能:
选择 strtol('4D',2) & 选择 to_binary('4D')
(to_binary 函数不存在,但 to_hex 存在)
我也尝试过查找 python UDF,但没有运气。
示例: 如果我将十六进制 4D 转换为二进制,我会期望 01001101
【问题讨论】:
你不能使用标准的python吗?为什么只使用 Redshift? " 我还没有找到可以工作的红移函数。" 很可能你必须自己去CREATE 一个..CREATE FUNCTION
你可以还将它与@qqqqq 答案连接起来。-> “使用 SQL SELECT 子句或 Python 程序创建一个新的标量用户定义函数 (UDF)。”
【参考方案1】:
这是一个可以做同样事情的 UDF
create function hex_to_bin(h varchar)
returns varchar immutable as $$
return bin(int(h,16))[2:]
$$ language plpythonu;
select hex_to_bin('4D');
hex_to_bin
1001101
更新: 带有前导零的新版本。需要第二个参数来指定输出的长度
create or replace function hex_to_bin(h varchar, number_of_bits int)
returns varchar immutable as $$
return bin(int(h,32))[2:].zfill(number_of_bits)
$$ language plpythonu;
select hex_to_bin('4D',10);
hex_to_bin
0010001101
【讨论】:
谢谢!这就是我一直在寻找的!你知道是否有办法包含前导零? 用包含前导零的函数版本更新了答案 你是最棒的!【参考方案2】:
dec = int('4D', 16); print("in Binary =",bin(dec))
【讨论】:
以上是关于如何在 Redshift 中将十六进制数转换为二进制数?的主要内容,如果未能解决你的问题,请参考以下文章