Presto数组包含一个喜欢某种模式的元素

day*_*yup 3 sql presto

例如,我的表中的一列是一个数组,我想检查该列是否包含一个包含子字符串"denied"的元素(所以像"在12:00 pm拒绝","被admin拒绝"这样的元素都将被计算,我相信我将不得不使用"喜欢"来识别模式.如何为此编写sql?

Mar*_*rso 18

在较新版本的 PrestoSQL(现在称为 Trino)中,您可以使用该any_match函数:

WHERE any_match(column, e -> e like '%denied%')
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 7

使用presto的数组函数:

  • filter(),返回满足给定条件的元素
  • cardinality(),返回数组的大小:

像这样:

where cardinality(filter(myArray, x -> x like '%denied%')) > 0
Run Code Online (Sandbox Code Playgroud)

  • 您可以`reduce(myArray,false,(a,x-> a OR x like'%denied%'))`以避免为每行复制一个数组。 (4认同)