首页 > 解决方案 > 在 IN 运算符内有 Like 运算符的可能性

问题描述

希望这是提出这个问题的正确标签。之前在几个论坛上发过,现在还没有答案。

以下是从 supbase 网站复制的查询。

const { data, error } = await supabase
  .from('users')
  .select('phone_number')
  .in('phone_number', LIKE(ARRAY[@contacts]))

我想达到同样的效果,但我需要在 IN 运算符中传递一个带有 Dart 变量的 LIKE 运算符。如下所示,这只是一个示例。

const { data, error } = await supabase
  .from('users')
  .select('phone_number')
  .in('phone_number', LIKE ANY(ARRAY[@contacts]))

dart 中的 contacts 变量是 String 类型的,它有这种格式

'%91960000000’,’%7780000000',’%6720000000',’%4160000000','%7780000000'

标签: postgrestsupabase

解决方案


在这种情况下,您将需要一个函数。

create or replace function get_users(contacts text[]) returns users as $$
  select * from users where phone_number like any(contacts);
$$ language sql;

然后您可以将其称为:

const { data, error } = await supabase
  .rpc('get_users', {contacts: ['%91960000000', '%6720000000']})
  .select('phone_number')

推荐阅读