Как преобразовать число в двоичном представлении в число снежинки

У меня есть число в двоичном (base-2) представлении:

"10100110"

Как я могу преобразовать его в число в Snowflake?

откуда берутся эти бинарные данные? Вы загружаете его в таблицу?

Mitch Wheat 15.12.2020 04:59

да, входные данные для этой задачи приходят в виде строк в двоичной форме (аналогичная проблема: когда строки приходят в шестнадцатеричной форме)

Felipe Hoffa 15.12.2020 05:03

Подожди, ты работаешь в Снежинке?

Mitch Wheat 15.12.2020 05:05

Да, я работаю в Снежинке. Обратите внимание, что связанные документы относятся к двоичным данным, а не к числам в двоичной форме «010101011110».

Felipe Hoffa 15.12.2020 05:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
5
750
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я пробовал с чистым SQL UDF - сначала он работал, но не при использовании его с данными по таблице.

Поэтому мне пришлось создать 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)))))
  $$

ОП не запрашивает функцию как таковую, поэтому само выражение select отвечает на вопрос.

Gordon Linoff 15.12.2020 14:31

Выражение SELECT работает, пока вы не попытаетесь применить его к данным, поступающим из таблицы, к сожалению.

Felipe Hoffa 15.12.2020 17:35

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 ДЕСЯТИЧНОЕ ЧИСЛО 10100110 166 101101101 365 1010011010 666 1011110 94

Другие вопросы по теме