PostgreSQL条件表达式
Posted 懵懂小虎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL条件表达式相关的知识,希望对你有一定的参考价值。
条件表达式在日常工作中很多场景都会用到,比如某个字段为空,取另外一个字段;某个值大于多少,取什么字段,小于多少取什么字段等等。那么下面来简单的学习下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班
|天河一路 |天河一路 |
|天河一路 |天河一路 |
常用的条件表达式就这些了。
以上是关于PostgreSQL条件表达式的主要内容,如果未能解决你的问题,请参考以下文章