Arrays 检查列表字符串中的元素是否为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

我在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
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
)