首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在postgresql中对未知数量的布尔值执行AND?

在PostgreSQL中,要对未知数量的布尔值执行AND操作,可以使用变量参数和PL/pgSQL函数。以下是一个示例:

  1. 创建一个PL/pgSQL函数,该函数接受一个布尔值数组作为参数,并返回所有布尔值的AND结果。
代码语言:sql
复制
CREATE OR REPLACE FUNCTION bool_and_agg(bool_array boolean[])
RETURNS boolean
AS $$
DECLARE
  result boolean := true;
  i integer := 1;
BEGIN
  IF array_length(bool_array, 1) = 0 THEN
    RETURN NULL;
  END IF;

  WHILE i <= array_length(bool_array, 1) AND result LOOP
    result := result AND bool_array[i];
    i := i + 1;
  END LOOP;

  RETURN result;
END;
$$ LANGUAGE plpgsql;
  1. 使用此函数对未知数量的布尔值执行AND操作。
代码语言:sql
复制
SELECT bool_and_agg(ARRAY[true, false, true, true]);

这将返回false,因为数组中有一个false值。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

postgresql 触发器 简介(转)

– 把before for each row的触发器删掉, 再测试插入 : postgres=# drop trigger tg02 on t_ret; DROP TRIGGER postgres=# drop trigger tg2 on t_ret; DROP TRIGGER postgres=# insert into t_ret values(1,’digoal’,now()); NOTICE: 00000: tg01 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg1 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg03, after for each row 的触发器函数返回空, 不影响后续的触发器是否被调用. 因为只要表上面发生了真正的行操作, after for each row就会被触发, 除非when条件不满足. (这个后面会讲到) LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg3 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg04 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg4 LOCATION: exec_stmt_raise, pl_exec.c:2840 INSERT 0 1 – 有数据插入. 这也说明了before for each statement的返回值为空并不会影响数据库对行的操作. 只有before for each row的返回值会影响数据库对行的操作. postgres=# select * from t_ret ; id | info | crt_time —-+——–+—————————- 1 | digoal | 2013-03-10 16:50:39.551481 (1 row)

02
领券