Arrays 检查列表字符串中的元素是否为BigQuery
我在BigQuery中有一个逗号分隔的列表Arrays 检查列表字符串中的元素是否为BigQuery,arrays,string,split,google-bigquery,Arrays,String,Split,Google Bigquery,我在BigQuery中有一个逗号分隔的列表 select '1,2,3' as number_list 如果列表中有1,则我希望返回true,而不拆分为数组,然后取消测试 我想说 select if(1 in split('1,2,3'),1,0) 我也不想说 select if('1,2,3' like '%,1,%' or '1,2,3' like '1,%' or '1,2,3' like '%,1',1,0) 下面是BigQuery标准SQL的示例 #standardSQL CRE
select '1,2,3' as number_list
如果列表中有1,则我希望返回true,而不拆分为数组,然后取消测试
我想说
select if(1 in split('1,2,3'),1,0)
我也不想说
select if('1,2,3' like '%,1,%' or '1,2,3' like '1,%' or '1,2,3' like '%,1',1,0)
下面是BigQuery标准SQL的示例
#standardSQL
CREATE TEMP FUNCTION InList(list STRING, num INT64) AS ((
SELECT COUNTIF(num = CAST(number AS INT64)) FROM UNNEST(SPLIT(list)) number
));
WITH `project.dataset.table` AS (
SELECT '1,2,3' AS number_list UNION ALL
SELECT '2,3,4'
)
SELECT number_list, InList(number_list, 1) in_list
FROM `project.dataset.table`
结果
Row number_list in_list
1 1,2,3 1
2 2,3,4 0
我还想避免说如果('1,2,3'类似“%”,1,%”或'1,2,3'类似“1,%”或'1,2,3'类似“%”,1,1,0),请选择该选项。
为了避免这种冗余,您可以使用以下版本
SELECT IF(CONCAT(',', number_list, ',') LIKE CONCAT('%,1,%'), 1, 0)
。。。最后,也是最有可能的赢家:o)
我希望能够说select if(拆分中的1('1,2,3'),1,0)
最近的是
SELECT IF('1' IN UNNEST(SPLIT(number_list)), 1, 0)
可以使用与搜索值匹配的MAX函数的子查询
SELECT id,
(SELECT MAX(IF(n = 1, n, null)) = 1 FROM UNNEST(number_list) AS n)
FROM (
SELECT
1 AS id,
[1,2,3] AS number_list
)
或与
SELECT id,
(SELECT MAX(IF(n = '1', n, null)) = '1' FROM UNNEST(number_list) AS n)
FROM (
SELECT
1 AS id,
SPLIT('1,2,3',',') AS number_list
)