BigQuery 中的 BitTest 搜索(按位置)
BitTest search in BigQuery (by position)
我在 BigQuery 中保留二进制数据的数字表示 table
我需要能够通过 BitPos 进行搜索并找出给定位置上的位是 0 还是 1
Oracle 模拟是 BitTest
Use this function to return TRUE (1) if the specified bit in a value is a 1; otherwise return FALSE (0).
Syntax BitTest(Value1, BitPos)
示例:数据库中的数字为 1099511627780
所以是二进制的10000000000000000000000000000000000000100
因此结果是:
BitTest(1099511627780, 1) = 0;
BitTest(1099511627780, 2) = 0;
BitTest(1099511627780, 3) = 1;
你能帮我找到 BigQuery 中的本机实现吗?
我正在浏览文档,但没有运气
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
您可以创建一个临时函数,使用移位和按位与来执行此计算。这是一个例子:
CREATE TEMP FUNCTION BitTest(value INT64, bit INT64) AS (
value >> (bit - 1) & 0x1 = 1
);
SELECT
value,
bit,
BitTest(value, bit) AS result
FROM (
SELECT 1099511627780 AS value, bit
FROM UNNEST(GENERATE_ARRAY(1, 42)) AS bit
)
ORDER BY bit;
函数BitTest
检查是否设置了基于1的索引处的位。此示例中的 FROM
子句生成 1 到 42 之间的位索引以演示输出是什么。
我在 BigQuery 中保留二进制数据的数字表示 table
我需要能够通过 BitPos 进行搜索并找出给定位置上的位是 0 还是 1
Oracle 模拟是 BitTest
Use this function to return TRUE (1) if the specified bit in a value is a 1; otherwise return FALSE (0).
Syntax BitTest(Value1, BitPos)
示例:数据库中的数字为 1099511627780
所以是二进制的10000000000000000000000000000000000000100
因此结果是:
BitTest(1099511627780, 1) = 0;
BitTest(1099511627780, 2) = 0;
BitTest(1099511627780, 3) = 1;
你能帮我找到 BigQuery 中的本机实现吗?
我正在浏览文档,但没有运气
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
您可以创建一个临时函数,使用移位和按位与来执行此计算。这是一个例子:
CREATE TEMP FUNCTION BitTest(value INT64, bit INT64) AS (
value >> (bit - 1) & 0x1 = 1
);
SELECT
value,
bit,
BitTest(value, bit) AS result
FROM (
SELECT 1099511627780 AS value, bit
FROM UNNEST(GENERATE_ARRAY(1, 42)) AS bit
)
ORDER BY bit;
函数BitTest
检查是否设置了基于1的索引处的位。此示例中的 FROM
子句生成 1 到 42 之间的位索引以演示输出是什么。