BigQuery中的BitTest搜索(按位置)

问题描述 投票:1回答:1

我在BigQuery表中保留二进制数据的数字表示

我需要能够通过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)

示例:DB中的数字是1099511627780

所以它是二进制10000000000000000000000000000000000000100

结果如下:

BitTest(1099511627780, 1) = 0;

BitTest(1099511627780, 2) = 0;

BitTest(1099511627780, 3) = 1;

你能帮我在BigQuery中找到原生实现吗?

我正在通过doc查看没有运气

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators

google-bigquery binary-search
1个回答
2
投票

您可以创建一个临时函数,使用位移和按位来执行此计算。这是一个例子:

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之间的位索引,以演示输出是什么。

© www.soinside.com 2019 - 2024. All rights reserved.