小编ibr*_*ter的帖子

Postgresql:与数组元素的模式匹配?

有什么方法可以对 postgresql 中的数组元素进行模式匹配(9.4,如果版本有所不同)?我有一个聚合函数,除其他外,它返回一个元素数组,例如:

SELECT 
   lognum
   ,array_agg(flightnum) as flightnums 
FROM logs 
GROUP BY lognum;
Run Code Online (Sandbox Code Playgroud)

其中flightnum字段是包含文本字符串或三或四位数字的 varchar。现在假设我要选择航班号以“8”开头的所有日志(即“800”或“8000”系列航班)。我的第一个想法是做这样的事情:

SELECT 
   * 
FROM (
      SELECT 
         lognum
         ,array_agg(flightnum) as flightnums 
      FROM logs 
      GROUP BY 
         lognum
     ) s1 
WHERE 
   '8%' like ANY(flightnums);
Run Code Online (Sandbox Code Playgroud)

但是,虽然这不会给出错误,但它也不会返回任何结果。我猜测这是因为通配符位于运算符的左侧。当然,反过来就是:

WHERE ANY(flightnum) like '8%'
Run Code Online (Sandbox Code Playgroud)

给我一个语法错误。那么有什么方法可以运行此查询,以便获得包含以 8(或其他)开头的航班号的任何行吗?


请注意,这是一个简化的示例,仅演示了我遇到困难的部分。

postgresql aggregate array like postgresql-9.4

5
推荐指数
1
解决办法
5672
查看次数

标签 统计

aggregate ×1

array ×1

like ×1

postgresql ×1

postgresql-9.4 ×1