如何在 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
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 |