PL/SQL в Superset/Trino – преобразование шестнадцатеричной функции

Я пытаюсь преобразовать следующий оператор pl/sql для использования в Superset/Trino:

select to_number(substr('D0023377B23DB783',-16), 'XXXXXXXXXXXXXXXX') from dual; 

результат: 14988599054092911360

В trino/superset я использую следующий оператор, но он не возвращает правильный результат

select from_base(substr('D0023377B23DB783', 2), 16) ;

возврат: 619539137935235 Ожидаемый возврат: 14988599099026945923

Кто-нибудь может мне помочь?

Заранее спасибо, Ана

пожалуйста, sql выберите to_number(substr('D0023377B23DB783',-16), 'XXXXXXXXXXXXXXXX') из двойного;

результат: 14988599054092911360

суперсет/трино

выберите from_base(substr('D0023377B23DB783', 2), 16) ;

возврат: 619539137935235 Ожидаемый возврат: 14988599099026945923

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы выбрасываете некоторые значимые цифры, поэтому ваш расчет становится недействительным. В идеале вы должны иметь возможность преобразовать число следующим образом:

select from_base('D0023377B23DB783', 16) ;

Но поскольку from_base возвращает BIGINT, это число слишком велико (см. Престо не может прочитать шестнадцатеричную строку: недопустимое число по основанию 16). Один из трюков — переключиться на DECIMAL и разобрать число по частям. Что-то вроде следующего может дать вам представление:

select from_base('D0', 16) * cast(power(16, 14) as decimal) 
    + from_base('023377B23DB783', 16);

Выход:

        _col0         
----------------------
 14988599099026945923

Большое спасибо за Ваш ответ! Но выдает ошибку: ошибка трино: недопустимое число по основанию 16: D0023377B23DB783 Я искал обходной путь и не нашел его. Я нашел это, объясняющее почему: stackoverflow.com/questions/69946854/ … Знаете ли вы, есть ли способ получить большее число?

Ana Pinheiro Torres 25.06.2024 15:52

@AnaPinheiroTorres, ты можешь посчитать и разобрать по частям, см. обновление.

Guru Stron 26.06.2024 21:14

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

Похожие вопросы

Проверка последовательных дней в SQL
Выполнение различных функций агрегирования для разных строк выходных данных, возвращаемых предложением group by
Получите значения столбцов A таблицы 1 и значений столбца B таблицы 2 с тем же идентификатором
Как выбрать следующее наименьшее значение и следующее наибольшее значение из определенного значения записи, которое было помечено?
Хранимая процедура: добавьте параметр для месяца или часа
Как эффективно самостоятельно присоединиться к одной и той же таблице несколько раз с порядком сортировки по возрастанию и убыванию?
Запретить SQL сопоставлять конечные пробелы и вместо этого явно сопоставлять условие
Как вы можете вычислить, является ли результат десятичным или целым числом в SQL?
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ НА ДВУХ ТАБЛИЦАХ MYSQL С 3 СВЯЗАННЫМИ КОЛОННАМИ
Подзапрос INSERT INTO SELECT, который использует udf и возвращает 1 значение