条件表达式在日常工作中很多场景都会用到,比如某个字段为空,取另外一个字段;某个值大于多少,取什么字段,小于多少取什么字段等等。那么下面来简单的学习下PostgreSQL
有那些条件表达式。
1、CASE
CASE
表达式是一种通用的条件表达式,类似于编程语言中的if else
语句。具体语法如下:
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END
CASE
子句可以用于任何表达式可以存在的地方。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班
|天河一路 |天河一路 |
|天河一路 |天河一路 |
常用的条件表达式就这些了。