oracle中decode怎么转换成pg-Oracle
Oracle DECODE 函数在 PostgreSQL 中的替换
Oracle DECODE 函数是一个用于根据条件判断而返回不同值的函数。在 PostgreSQL 中,没有与 DECODE 函数完全相对应的函数,但可以使用 CASE 表达式或联合来实现类似的功能。
CASE 表达式
CASE 表达式的语法如下:
CASE WHEN условие1 THEN результат1 WHEN условие2 THEN результат2 ... ELSE результат ELSE END
登录后复制
它根据条件依次进行判断,并返回与第一个满足条件的结果。如果没有任何条件满足,则返回 ELSE 结果。
联合
联合是一种使用多个 SELECT 语句从多个表中检索数据的技术。它也可以用于实现 DECODE 函数的功能,方法是使用 UNION ALL 操作符组合多个 SELECT 语句:
SELECT CASE WHEN условие1 THEN résultat1 ELSE NULL END AS результат_1 UNION ALL SELECT CASE WHEN условие2 THEN résultat2 ELSE NULL END AS результат_2 ...
登录后复制
上述查询将返回一个表,其中每行都包含一个满足条件的结果列。
示例
假设我们有一个表 people,其中包含以下列:
- name - 人员姓名
- gender - 人员性别
我们希望创建一个查询来根据性别获取人员的尊称:
Oracle DECODE 函数:
SELECT name, DECODE(gender, 'M', 'Mr.', 'Ms.') AS title FROM people;
登录后复制
PostgreSQL CASE 表达式:
SELECT name, CASE WHEN gender = 'M' THEN 'Mr.' WHEN gender = 'F' THEN 'Ms.' ELSE NULL END AS title FROM people;
登录后复制
PostgreSQL 联合:
SELECT name, CASE WHEN gender = 'M' THEN 'Mr.' ELSE NULL END AS title UNION ALL SELECT name, CASE WHEN gender = 'F' THEN 'Ms.' ELSE NULL END AS title FROM people;
登录后复制
这三个查询都将产生相同的结果如下:
name | title |
---|---|
John | Mr. |
Mary | Ms. |