如何将二进制表示形式的数字转换为雪花数字
how to transform a number in binary representation to a Snowflake number
我有一个二进制(base-2)表示的数字:
"10100110"
如何在 Snowflake 中将其转换为数字?
我尝试使用 SQL 纯 UDF - 一开始它可以工作,但当它与 table 上的数据一起使用时就不行了。
所以我必须创建一个 Javascript UDF:
create or replace function bin_str_to_number(a string)
returns float
language javascript
as
$$
return parseInt(A, 2)
$$
;
select bin_str_to_number('110');
郑重声明,这是我在尝试使用纯 SQL UDF 时遇到的错误:
SQL compilation error: Unsupported subquery type cannot be evaluated
UDF:
create or replace function bin_str_to_number(a string)
returns number
as
$$
(select sum(value::number*pow(2,index))::number
from table(flatten(input=>split_string_to_char(reverse(a)))))
$$
Snowflake 不提供开箱即用的数字或整数到二进制函数,但是可以使用这些 UDF 函数代替
如果字符串被传递,我也会重载 UDF。
CREATE OR REPLACE FUNCTION int_to_binary(NUM VARIANT)
RETURNS string
LANGUAGE JAVASCRIPT
AS $$
return (NUM >>> 0).toString(2);
$$;
CREATE OR REPLACE FUNCTION int_to_binary(NUM STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS $$
return (NUM >>> 0).toString(2);
$$;
今天早上这是一个有趣的挑战!如果你想用纯 SQL:
with binary_numbers as (
select column1 as binary_string
from (values('10100110'), ('101101101'), ('1010011010'), ('1011110')) tab
)
select
binary_string,
sum(to_number(tab.value) * pow(2, (tab.index - 1))) decimal_number
from
binary_numbers,
table(split_to_table(trim(replace(replace(reverse(binary_numbers.binary_string), '1', '1,'), '0', '0,' ), ','), ',')) tab
group by binary_string
生产:
BINARY_STRING
DECIMAL_NUMBER
10100110
166
101101101
365
1010011010
666
1011110
94
我有一个二进制(base-2)表示的数字:
"10100110"
如何在 Snowflake 中将其转换为数字?
我尝试使用 SQL 纯 UDF - 一开始它可以工作,但当它与 table 上的数据一起使用时就不行了。
所以我必须创建一个 Javascript UDF:
create or replace function bin_str_to_number(a string)
returns float
language javascript
as
$$
return parseInt(A, 2)
$$
;
select bin_str_to_number('110');
郑重声明,这是我在尝试使用纯 SQL UDF 时遇到的错误:
SQL compilation error: Unsupported subquery type cannot be evaluated
UDF:
create or replace function bin_str_to_number(a string)
returns number
as
$$
(select sum(value::number*pow(2,index))::number
from table(flatten(input=>split_string_to_char(reverse(a)))))
$$
Snowflake 不提供开箱即用的数字或整数到二进制函数,但是可以使用这些 UDF 函数代替
如果字符串被传递,我也会重载 UDF。
CREATE OR REPLACE FUNCTION int_to_binary(NUM VARIANT)
RETURNS string
LANGUAGE JAVASCRIPT
AS $$
return (NUM >>> 0).toString(2);
$$;
CREATE OR REPLACE FUNCTION int_to_binary(NUM STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS $$
return (NUM >>> 0).toString(2);
$$;
今天早上这是一个有趣的挑战!如果你想用纯 SQL:
with binary_numbers as (
select column1 as binary_string
from (values('10100110'), ('101101101'), ('1010011010'), ('1011110')) tab
)
select
binary_string,
sum(to_number(tab.value) * pow(2, (tab.index - 1))) decimal_number
from
binary_numbers,
table(split_to_table(trim(replace(replace(reverse(binary_numbers.binary_string), '1', '1,'), '0', '0,' ), ','), ',')) tab
group by binary_string
生产:
BINARY_STRING | DECIMAL_NUMBER |
---|---|
10100110 | 166 |
101101101 | 365 |
1010011010 | 666 |
1011110 | 94 |