如何在 Amazon Redshift 中将无符号整数转换为二进制字符串?例如,对于数字 10,我想得到"1010"。
我找到了一个这样做的 UDF,但我宁愿不使用任何 UDF。
这可能会晚了,但请尝试FROM_VARBYTE
:
SELECT FROM_VARBYTE(10::VARBYTE, 'binary')
>>> 00000000000000000000000000001010
如果只需要1010
部分,请尝试在末尾添加类型转换:
SELECT FROM_VARBYTE(10::VARBYTE, 'binary')::INT
>>> 1010
如果您担心结果超出默认整数的范围,请将其转换为BIGINT
:
SELECT FROM_VARBYTE(1023::VARBYTE, 'binary')::BIGINT
>>> 1111111111
有人编写了这个UDF的事实表明Redshift的SQL中没有内置的功能可以执行此操作。
如果不想使用 UDF,可以创建一个包含所有二进制值的查找表,然后 JOIN 到该表。这可能比重复运行 Python 函数更快,但我注意到该函数被编码为STABLE
,因此它将缓存结果。