我试图拉出阵列只满足一定条件的记录。
例如,我只想要包含“IAB3”的结果。
这是表格的样子
投标
BidderBanner / WinCat
1600402 / null
1911048 / null
1893069 / [IAB3-11, IAB3]
1214894 / IAB3
我最初的想法是什么
SELECT * FROM bids WHERE WinCat = "IAB3"
但我得到一个错误,表示运算符类型数组,字符串不匹配。
该数据库位于Google Big Query中。
以下是BigQuery Standard SQL
#standardSQL
SELECT * FROM `project.dataset.bids` WHERE 'IAB3' IN UNNEST(WinCat)
您可以使用问题中的示例数据进行测试,使用上面的示例,如下例所示
#standardSQL
WITH `project.dataset.bids` AS (
SELECT 1600402 BidderBanner, NULL WinCat UNION ALL
SELECT 1911048, NULL UNION ALL
SELECT 1893069, ['IAB3-11', 'IAB3'] UNION ALL
SELECT 1214894, ['IAB3']
)
SELECT * FROM `project.dataset.bids` WHERE 'IAB3' IN UNNEST(WinCat)
结果
你需要在sql中使用单引号来表示所有字符串。它应该是WHERE WinCat ='IAB 3'不是WHERE WinCat =“IAB 3”
一种方法使用unnest()
,如下所示:
SELECT b.*
FROM bids b
WHERE 'IAB3' IN (SELECT unnest(b.WinCats))
但是,数组语法因支持它们的数据库而异,并且它们不属于“标准SQL”。
这将工作:
SELECT * FROM bids WHERE REGEXP_LIKE (WinCat, '(.)*(IAB3)+()*');