【问题标题】:Converting Base64 to Hex in Redshift / python在 Redshift / python 中将 Base64 转换为十六进制
【发布时间】:2018-09-10 20:51:54
【问题描述】:

我们正在将我们的数据库从 Postgres 迁移到 Redshift,我们在将 Base64 字符串转换为十六进制时遇到了一些挑战。

在旧情况下(在 postgres 中)我们有一个函数:

CREATE OR REPLACE FUNCTION hex_to_int(hexval character varying)
 RETURNS integer
 LANGUAGE plpgsql
 IMMUTABLE STRICT
AS $$
DECLARE
   result  int;
BEGIN
 EXECUTE 'SELECT x''' || hexval || '''::int' INTO result;
 RETURN result;
END;
$$

我们在选择中调用它:

SELECT 
encode(decode('AQDAAi0EAAoFAAcN5A=='::text, 'base64'::text), 'hex'::text) AS hexresult 
FROM table

结果显示为:0100c0022d04000a0500070de4

Redshift 似乎不支持 plpgsql 函数,现在正在寻找一种不同的方法来做到这一点。

I have tried to do this with base64.b64decode

结果我看到:

【问题讨论】:

  • 能否请您检查您的问题是否完整?您提供了一个名为 hex_to_int 的函数,但您的示例没有调用该函数。您的要求似乎是在 Amazon Redshift SELECT 语句中采用 base64 字符串(例如 'AQDAAi0EAAoFAAcN5A==')并将其转换为十六进制数字(0100c0022d04000a0500070de4)。对吗?

标签: base64 hex amazon-redshift decode encode


【解决方案1】:

此 Amazon Redshift User-Defined Function 会将 base64 转换为十六进制数字:

CREATE FUNCTION f_base64hexdigits (s varchar)
  RETURNS varchar
IMMUTABLE
AS $$
  import base64
  import binascii
  return binascii.hexlify(base64.b64decode(s))
$$ LANGUAGE plpythonu;

像这样使用它:

SELECT f_base64hexdigits('AQDAAi0EAAoFAAcN5A==')

输出:

0100c0022d04000a0500070de4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2010-12-15
    相关资源
    最近更新 更多