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

如何在PostgreSQL中替换Oracle的BITAND与DECODE函数?

Oracle BITAND+DECODE转PostgreSQL的正确写法

原Oracle语句逻辑:判断p.privilege与2的按位与结果是否为2,是则返回'true',否则返回'false'。

你的尝试语句存在问题:((p.privilege & 2 = 2))::int是将布尔值(p.privilege & 2 = 2的结果是true/false)转为整数,PostgreSQL中布尔true转int是1,false是0,所以when 2永远不会匹配,只会走到else分支返回'false'。

以下是几种正确的替换方案:

方案1:标准CASE语句(最直观)

SELECT 
  CASE 
    WHEN p.privilege & 2 = 2 THEN 'true' 
    ELSE 'false' 
  END AS is_approver
FROM person p;

方案2:简化CASE写法

SELECT 
  CASE (p.privilege & 2)
    WHEN 2 THEN 'true' 
    ELSE 'false' 
  END AS is_approver
FROM person p;

方案3:利用布尔值转文本(更简洁)

PostgreSQL中布尔值可以直接转为'true'/'false'格式的字符串,所以可以直接将判断结果转换后使用:

SELECT CAST((p.privilege & 2 = 2) AS TEXT) AS is_approver
FROM person p;

或者用更简洁的写法:

SELECT (p.privilege & 2 = 2)::TEXT AS is_approver
FROM person p;

这几种写法都能实现原Oracle语句的逻辑,其中方案3最简洁,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:45:37