Postgresql 条件表达式

条件表达式

PostgreSQL中可用的SQL兼容的条件表达式。

如果你的需求超过这些条件表达式的能力,你可能会希望用一种更富表现力的编程语言写一个存储过程。 

CASE

SQL CASE表达式是一种通用的条件表达式,类似于其它编程语言中的 if/else 语句:

CASE WHEN condition THEN result
[WHEN …]
[ELSE result]
END

CASE子句可以用于任何表达式可以出现的地方。每一个condition是一个返回boolean结果的表达式。如果结果为真,那么CASE表达式的结果就是符合条件的result,并且剩下的CASE表达式不会被处理。如果条件的结果不为真,那么以相同方式搜寻任何随后的WHEN子句。如果没有WHEN condition为真,那么CASE表达式的值就是在ELSE子句里的result。如果省略了ELSE子句而且没有条件为真,结果为空。

-- Example:
postgres=# SELECT * FROM t_1 ORDER BY 1, 2;
 num | name 
-----+------
   1 | a
   2 | b
   3 | c
   4 | a
(4 rows)
postgres=# SELECT num,
postgres-#   CASE num WHEN 1 THEN 'one'
postgres-#            WHEN 2 THEN 'two'
postgres-#            WHEN 3 THEN 'three'
postgres-#            ELSE 'other'
postgres-#   END 
postgres-#   FROM t_1 
postgres-#   ORDER BY 1, 2;
 num | case  
-----+-------
   1 | one
   2 | two
   3 | three
   4 | other
(4 rows)

所有result表达式的数据类型都必须可以转换成单一的输出类型。

COALESCE

COALESCE(value [, …])
COALESCE函数返回它的第一个非空参数的值。当且仅当所有参数都为空时才会返回空。它常用于在为显示目的检索数据时用缺省值替换空值。

--Example
postgres=# SELECT coalesce(NULL, NULL, num) FROM t_1 order by 1;
 coalesce 
----------
        1
        2
        3
        4
(4 rows)

和CASE表达式一样,COALESCE将不会 计算无助于判断结果的参数;也就是说,在第一个非空参数右边的参数不会被计算。这个 SQL 标准函数提供了类似于NVL和IFNULL的能力,它们被用在某些其他数据库系统中。

NULLIF

NULLIF(value1, value2)
当value1和value2相等时,NULLIF返回一个空值。 否则它返回value1。 这些可以用于执行前文给出的COALESCE例子的逆操作:

postgres=# SELECT nullif(num::text, name) FROM t_1 order by 1;
 nullif 
--------
 1
 2
 3
 4
(4 rows)

GREATEST和LEAST

GREATEST(value [, …])
LEAST(value [, …])
GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。 这些表达式必须都可以转换成一个普通的数据类型,它将会是结果类型 。列表中的 NULL 数值将被忽略。只有所有表达式的结果都是 NULL 的时候,结果才会是 NULL。

请注意GREATEST和LEAST都不是 SQL 标准,但却是很常见的扩展。某些其他数据库让它们在任何参数为 NULL 时返回 NULL,而不是在所有参数都为 NULL 时才返回 NULL。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值