在 IN 运算符中使用 Like 运算符的可能性

possibility of having a Like operator inside of the IN operator

希望这是问这个问题的正确标签。之前在几个论坛发过,还没得到答案

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

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]))

contacts变量在dart中是String类型,有这样的格式

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

在这种情况下你需要一个函数。

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')