You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL/Metabase:如何创建变量实现多值ID与文本过滤

多值过滤实现方案

一、数字类型ID(如采购商品ID)过滤

如果需要匹配逗号分隔的多个数字ID(输入示例:1001,1003,1005),可根据使用的数据库选择对应写法:

PostgreSQL 写法

[[where "Product ID" in (select unnest(string_to_array({{product_ids}}, ',')))]]

string_to_array将输入的逗号分隔字符串转为数组,unnest把数组拆成单行数据,最终用IN匹配任一ID。

MySQL 写法

[[where FIND_IN_SET("Product ID", {{product_ids}}) > 0]]

FIND_IN_SET函数会检查ID是否在逗号分隔的字符串中,返回大于0的值即匹配成功。

二、文本类型变量(如用户名)过滤

如果需要匹配逗号分隔的多个用户名(支持模糊匹配,输入示例:张三,王经理),写法和数字ID有明显差异——需要对每个分割后的文本做模糊匹配:

PostgreSQL 写法(不区分大小写)

[[where exists (
  select 1 
  from unnest(string_to_array({{user_names}}, ',')) as name_items 
  where "User name" ~* concat('%', name_items, '%')
)]]

这段代码会把输入的用户名拆分成单个条目,逐个检查用户名是否包含目标子串,只要有一个匹配就返回结果。~*表示不区分大小写的正则匹配,若需严格区分大小写,换成~即可。

通用模糊匹配写法(适配多数数据库)

如果输入的用户名数量固定,可直接用OR拼接多个LIKE条件,比如输入两个用户名时:

[[where "User name" like concat('%', {{name1}}, '%') or "User name" like concat('%', {{name2}}, '%')]]

核心差异说明

  • 数字ID:以精确匹配为主,依赖数组拆分或FIND_IN_SET实现多值匹配,无需额外拼接通配符。
  • 文本变量:通常需模糊匹配,必须对每个分割后的文本拼接%通配符,或用正则表达式实现多条件的OR逻辑。

内容的提问来源于stack exchange,提问作者Joehat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:20:56