条件表达式在日常工作中很多场景都会用到,比如某个字段为空,取另外一个字段;某个值大于多少,取什么字段,小于多少取什么字段等等。那么下面来简单的学习下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 conditiontrue, 那么表达式的结果就是在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条件表达式的更多相关文章

  1. PostgreSQL条件表达式 case when then end

    例: SELECT CASE WHEN (store_size <= (100)::NUMERIC) THEN '小店'::TEXT WHEN (store_size >= (200):: ...

  2. [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数

    前言:本文以学习记录的形式发表出来,前段时间苦于照模型聚合中group by 找了很久,官方文章中没有很明确的说出group by,但在文档中有提到!!! 正文(最后编辑于2016-11-12): 聚 ...

  3. Scala:条件表达式的好处

    条件表达式的好处之一是:让代码更简洁,例如在一个需要根据不同条件收集不同值的场景中,多数语言提供的代码如下: ; ) { tmp = xxx; } ) { tmp = yyy; } else { tm ...

  4. Shell 条件表达式汇总

    条件表达式 文件表达式 if [ -f  file ]    如果文件存在if [ -d ...   ]    如果目录存在if [ -s file  ]    如果文件存在且非空 if [ -r f ...

  5. shell之条件表达式

    conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...

  6. Python学习教程(learning Python)--3.3 分支语句的条件表达式详解

    本节主要讨论分支语句的条件表达式问题. 在if或者if-else分支控制语句里由于都用到条件判断(表达式是真还是假),条件判断可以是一种关系运算也可以是布尔表达式. 本节将对if及if-else语句的 ...

  7. golang没有条件表达式?:

    详见The Go Programming Language Specification中Expressions一章中未提及此表达式, 故其不支持. 再强调一次, GO不支持条件表达式 conditio ...

  8. thymeleaf条件表达式

    条件表达式形式:condition, then and else <tr th:class="${row.even}? 'even' : 'odd'"> ... < ...

  9. SQL条件表达式

    需求:数据表中如果满足某个条件,返回表中所有数据,否则不返回数据. 语法:CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句. CASE WHEN condition T ...

随机推荐

  1. 洛谷P1290欧几里德游戏

    题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...

  2. 记录给树莓派刷Raspberry Pi OS(Raspbian)系统的配置流程

    准备材料 树莓派(一定要贴散热片,最好再加个小风扇) TF内存卡 (记得选传输规范为Class10标准的) 读卡器 电脑(这里我使用的电脑是Windows系统,其它系统可能与下面的步骤有出入,还望悉知 ...

  3. 华为分析+App Linking:一站式解决拉新、留存、促活难

    移动互联网时代,用户注意力稀缺,"如何让用户一键直达APP特定页面"越来越受到产品和运营同学的关注. 比如在各个渠道投放了APP安装广告,希望新用户下载APP首次打开时直接进入活动 ...

  4. 告别DNS劫持,一文读懂DoH

    如果评选一个差评服务器榜单,除去育碧高居榜首外,一定也少不了 Nintendo Switch 让人头秃的联网服务.尽管任天堂已经架设了香港 CDN 服务器用于加速,但是更新安装的速度也没有什么大幅改变 ...

  5. adb下载安装

    下载地址:https://www.androiddevtools.cn/# 首页tab工具栏: 选择Android SDK工具-- SDK Tools 下载任一版本即可 安装 :将下载的安装包解压到D ...

  6. IP Networks UVA - 1590

     Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...

  7. Redis 与 Python 交互

    1. Python 库安装 2. 交互代码范例 3. Redis 操作封装 4. 应用范例:用户登录 1. Python 库安装 联网安装 pip install redis 使用源码安装 到中文官网 ...

  8. Rsync多模块复制、排除指定文件及目录以及数据无差异复制的应用实例

    在我的博客<Rsync 数据复制软件应用>中,拉取数据访问的都是服务器端的/backup 目录,当然我们在其他目录下拉取数据.而实现这种操作就是指多模块复制. 要实现多模块复制首先需要修改 ...

  9. B/S与C/S架构的区别

    C/S架构优点:1)界面比较丰富2)安全性高3)实现的功能更多,可以实现更复杂的业务4)客户端可以处理部分业务,分担服务器端压力缺点:1)需要开发独立的客户端软件,开发成本高2)需要安装独立的客户端软 ...

  10. wordpress 自定义路由及展示页

    wordpress 自定义路由及展示页 注册domain/test这个路由 wordpress 有重写url的方法,叫 add_rewrite_rule().在function.php中加入如下代码段 ...