如何在 Snowflake 中将字符串转换为二进制?

How convert a string to binary in Snowflake?

base16 BINARY 格式的原始字节值 -

7e-c2-8c-c2-8a-c7-61-60-34-b7-0e-de-c2-28-9e-b3-08-a6-c3-93-74-99-34-09-48-0c-60-e3-96-47-04-e3

转换为VARCHAR后-7EC28CC28AC7616034B70EDEC2289EB308A6C39374993409480C60E3964704E3

我需要将它转换回 BINARY,为此我使用了 TO_BINARY('7EC28CC28AC7616034B70EDEC2289EB308A6C39374993409480C60E3964704E3') 函数,

但是 returns 7EC28CC28AC7616034B70EDEC2289EB308A6C39374993409480C60E3964704E3

而不是所需的 7e-c2-8c-c2-8a-c7-61-60-34-b7-0e-de-c2-28-9e-b3-08-a6-c3-93-74-99-34-09-48-0c-60-e3-96-47-04-e3

注意 - TO_BINARY(string,'base16') 不起作用

您想去除连字符,并使用 TO_BINARY on 'HEX' 输入类型

SELECT 
    '7e-c2-8c-c2-8a-c7-61-60-34-b7-0e-de-c2-28-9e-b3-08-a6-c3-93-74-99-34-09-48-0c-60-e3-96-47-04-e3' as tb_b16_str
    ,replace(tb_b16_str, '-') as no_hyphen
    ,to_binary(no_hyphen, 'HEX') as now_as_bin
    ,base64_encode(now_as_bin) as now_as_base64
;
TB_B16_STR NO_HYPHEN NOW_AS_BIN NOW_AS_BASE64
7e-c2-8c-c2-8a-c7-61-60-34-b7-0e-de-c2-28-9e-b3-08-a6-c3-93-74-99-34-09-48-0c-60-e3-96-47-04-e3 7ec28cc28ac7616034b70edec2289eb308a6c39374993409480c60e3964704e3 7ec28cc28ac7616034b70edec2289eb308a6c39374993409480c60e3964704e3 fsKMworHYWA0tw7ewiieswimw5N0mTQJSAxg45ZHBOM=

如果我们将 BASE64 粘贴到 notepad++ 中并对其进行 BASE64 解码,并将其保存为 bin 文件并在十六进制编辑器中打开,我们可以确定 now_as_bin 已按预期正确解码..

您已经有一个二进制文件:

所以再考虑一下,您已经成功地将数据转换为 Snowflake 二进制文件:

SELECT '7EC28CC28AC7616034B70EDEC2289EB308A6C39374993409480C60E3964704E3' as hex_str
    ,system$typeof(hex_str)
    ,TO_BINARY(hex_str) as now_as_binary
    ,system$typeof(now_as_binary);

结果你不喜欢它的外观,它是 Snowflake 二进制文件。

HEX_STR SYSTEM$TYPEOF(HEX_STR) NOW_AS_BINARY SYSTEM$TYPEOF(NOW_AS_BINARY)
7EC28CC28AC7616034B70EDEC2289EB308A6C39374993409480C60E3964704E3 VARCHAR(64)[LOB] 7ec28cc28ac7616034b70edec2289eb308a6c39374993409480c60e3964704e3 BINARY(8388608)[LOB]

如何导出回 teradata:

或者您真的在寻找“如何将二进制文件转换为 Teradata 格式化字符串以从 Snowflake 导出到 Teradata”

所以步骤分解:

SELECT 
    '7EC28CC28AC7' as hex_str
    ,TO_BINARY(hex_str) as now_as_binary
    ,hex_encode(now_as_binary) as back_to_hex
    ,REGEXP_REPLACE(back_to_hex, '(..)','\1-') as made_chunky
    ,RTRIM(made_chunky, '-') as wanted
    ;

给出:

HEX_STR NOW_AS_BINARY BACK_TO_HEX MADE_CHUNKY WANTED
7EC28CC28AC7 7ec28cc28ac7 7EC28CC28AC7 7E-C2-8C-C2-8A-C7- 7E-C2-8C-C2-8A-C7

并且可以像这样混合在一起:

SELECT 
    TO_BINARY('7EC28CC28AC7') as now_as_binary
    ,RTRIM(REGEXP_REPLACE(hex_encode(now_as_binary), '(..)','\1-'), '-') as made_chunky
    ;    
NOW_AS_BINARY MADE_CHUNKY
7ec28cc28ac7 7E-C2-8C-C2-8A-C7