簡體   English   中英

如何在 Snowflake 中將 hash 字符串轉換為 integer?

[英]How to convert a hash string to an integer in Snowflake?

我正在嘗試獲取十進制值的 hash 並將其轉換為 integer。 但是查詢導致以下錯誤:

Numeric value 'b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda' is not recognized

SELECT (CAST(sha2(TO_VARCHAR(ABS(12.5)), 256) AS INTEGER) % 100) AS temp_value

在 Snowflake 中將 hash 字符串轉換為 integer 的正確方法是什么? 我不能使用任何用戶定義的函數。 並且必須具有 Snowflake 原生功能的 go。

hash 值包含字母字符,因此會引發錯誤

 SELECT --(CAST( sha2( TO_VARCHAR( ABS(12.5)), 256)-- AS INTEGER) % 100) AS temp_value;

您需要將 hash 編碼的十六進制值轉換為 int。

I've not been able to find a function built into Snowflake that does this, but if you have a look in the following link, it will explain how to create a javascript function to do the conversion for you: https://snowflakecommunity. force.com/s/article/faq-does-snowflake-have-a-hex-to-int-type-function

如果您在鏈接中使用 function,那么您的代碼將變成這樣:

SELECT (CAST(js_hextoint(sha2(TO_VARCHAR(ABS(12.5)), 256)) AS INTEGER) % 100) AS temp_value

恐怕我無法測試上面的代碼,所以可能是括號放錯了地方......

您有一個 56 位的十六進制數。 它不適合 38 的最大數字精度。您可以使用浮點數,但這會失去精度。

create or replace function CONV(VALUE_IN string, OLD_BASE float, NEW_BASE float)
returns string
language javascript
as
$$
    // Usage note: Loses precision for very large inputs
    return parseInt(VALUE_IN, Math.floor(OLD_BASE).toString(Math.floor(NEW_BASE)));
$$;

select conv('b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda', 16, 10);

--Returns 8.368282050700398e+76

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM