条件表达式在日常工作中很多场景都会用到,比如某个字段为空,取另外一个字段;某个值大于多少,取什么字段,小于多少取什么字段等等。那么下面来简单的学习下PostgreSQL有那些条件表达式。
1、CASECASE表达式是一种通用的条件表达式,类似于编程语言中的if else语句。具体语法如下:
CASE WHEN condition THEN result [WHEN ...] [ELSE result] ENDCASE子句可以用于任何表达式可以存在的地方。condition是一个返回boolean的表达式。如果条件的结果为true,那么CASE 表达式的结果就是符合条件的result,并且不再处理剩余的CASE表达式。如果条件的结果为false,那么以相同方式搜寻任何随后的WHEN子句。如果没有WHEN condition为true, 那么表达式的结果就是在ELSE子句里的result。 如果省略了ELSE子句且没有匹配的条件,结果为NULL。如下例子:
select id, (CASE WHEN id=1 THEN 'one' WHEN id=2 THEN 'two' WHEN id=3 THEN 'three' WHEN id=4 THEN 'four' ELSE 'other' END) AS ids from student; --结果: id|ids | --|-----| 1|one | 2|two | 3|three| 4|for |除了上面的写法,CASE还有另外一种变体,语法如下:
CASE expression WHEN value THEN result [WHEN ...] [ELSE result] END先计算expression的值,然后与每个WHEN子句里声明的value表达式对比,直到找到一个相等的。 如果没有找到匹配的,则返回在ELSE子句里的result(或者NULL)。将上面的例子改一下为:
select id, (CASE id WHEN 1 THEN 'one' WHEN 2 THEN 'two' WHEN 3 THEN 'three' WHEN 4 THEN 'four' ELSE 'other' END) AS ids from student; --结果: id|ids | --|-----| 1|one | 2|two | 3|three| 4|for |CASE语句不光可以在select后使用,也可以在where后使用,当有时某个字段需要条件来处理时,就可以使用,如下:
select id from student WHERE (CASE WHEN id >2 THEN 'a' ELSE 'b' END) = 'a' --结果: id| --| 3| 4| 2、COALESCE使用过Oracle数据库的肯定知道里面的NVL函数,那么在PostgreSQL数据库可以用COALESCE函数来实现类似功能。
COALESCE(value [, ...])COALESCE返回它的第一个非NULL的参数值。如果所有参数都是null那么返回null。 它常用于在显示数据时用缺省值替换 NULL。例如:
select COALESCE(s.address,'地址不详') AS address FROM student s --结果: address| -------| 天河一路 | 天河一路 | 地址不详 | 地址不详 |这个函数指判断NULL,如果字段为空字符串,则不在范围
3、NULLIF NULLIF(value1, value2)当且仅当value1等于value2时, NULLIF才返回null。否则它返回value1。
select NULLIF(address,grade),address,grade FROM student s --结果: nullif|address|grade| ------|-------|-----| 天河一路 |天河一路 |一年级1班 天河一路 |天河一路 |一年级2班 |天河一路 |天河一路 | |天河一路 |天河一路 |常用的条件表达式就这些了。