检查列表字符串 BigQuery 中的元素是不是
Posted
技术标签:
【中文标题】检查列表字符串 BigQuery 中的元素是不是【英文标题】:Check if element in list string BigQuery检查列表字符串 BigQuery 中的元素是否 【发布时间】:2019-12-20 22:57:59 【问题描述】:我在 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)
【问题讨论】:
【参考方案1】:以下 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
我也想避免说
SELECT IF('1,2,3' LIKE '%,1,%' OR '1,2,3' LIKE '1,%' OR '1,2,3' LIKE '%,1',1,0)
为了避免这种冗余,您可以使用以下版本
SELECT IF(CONCAT(',', number_list, ',') LIKE CONCAT('%,1,%'), 1, 0)
...而且,最后 - 最有可能是赢家 :o)
我想能够说
select if(1 in split('1,2,3'),1,0)
最接近的是
SELECT IF('1' IN UNNEST(SPLIT(number_list)), 1, 0)
【讨论】:
【参考方案2】:您可以使用与您的搜索值匹配的 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
)
【讨论】:
以上是关于检查列表字符串 BigQuery 中的元素是不是的主要内容,如果未能解决你的问题,请参考以下文章