postgresql array数组 添加 包含contains 方法

当前pg查询数组包含的语法类似下面:
select * from users where (4 = any (role_int_array))

我期望通过如下语句可达到同样的查询结果:
select * from users where role_int_array contains 4

请问这个方法function怎么添加?谢谢~

阅读 14.8k
1 个回答

PostgreSQL允许用户自定义操作符,但是操作符不能包含字母。系统已经有一个@>操作符用于判断数组之间的包含关系了,我们可以重载它。

首先定义一个函数:

create function array_contains(ar anyarray, x anyelement)
returns boolean as
$$
    select x = any (ar);
$$ language sql;

然后将@>与其绑定即可:

create operator @> (
    leftarg = anyarray,
    rightarg = anyelement,
    procedure = array_contains);

使用刚刚定义的操作符:

select array[1,2,3] @> 3;
 ?column?
----------
 t
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题