如何在 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 中将十六进制数转换为二进制数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将字节数转换为二进制数?

如何在 Amazon Redshift 中将整数转换为位字符串?

严格使用乘法和除法在Java中将二进制数转换为十进制数

在 C 中将二进制转换为十进制会出错

如何将二进制表示的数字转换为雪花数

如何在 Java 中将二进制字符串转换为以 10 为底的整数