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条件表达式的更多相关文章
- PostgreSQL条件表达式 case when then end
例: SELECT CASE WHEN (store_size <= (100)::NUMERIC) THEN '小店'::TEXT WHEN (store_size >= (200):: ...
- [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
前言:本文以学习记录的形式发表出来,前段时间苦于照模型聚合中group by 找了很久,官方文章中没有很明确的说出group by,但在文档中有提到!!! 正文(最后编辑于2016-11-12): 聚 ...
- Scala:条件表达式的好处
条件表达式的好处之一是:让代码更简洁,例如在一个需要根据不同条件收集不同值的场景中,多数语言提供的代码如下: ; ) { tmp = xxx; } ) { tmp = yyy; } else { tm ...
- Shell 条件表达式汇总
条件表达式 文件表达式 if [ -f file ] 如果文件存在if [ -d ... ] 如果目录存在if [ -s file ] 如果文件存在且非空 if [ -r f ...
- shell之条件表达式
conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...
- Python学习教程(learning Python)--3.3 分支语句的条件表达式详解
本节主要讨论分支语句的条件表达式问题. 在if或者if-else分支控制语句里由于都用到条件判断(表达式是真还是假),条件判断可以是一种关系运算也可以是布尔表达式. 本节将对if及if-else语句的 ...
- golang没有条件表达式?:
详见The Go Programming Language Specification中Expressions一章中未提及此表达式, 故其不支持. 再强调一次, GO不支持条件表达式 conditio ...
- thymeleaf条件表达式
条件表达式形式:condition, then and else <tr th:class="${row.even}? 'even' : 'odd'"> ... < ...
- SQL条件表达式
需求:数据表中如果满足某个条件,返回表中所有数据,否则不返回数据. 语法:CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句. CASE WHEN condition T ...
随机推荐
- ECharts使用指南
第一步,引入ECharts: echars的引入十分简单,只需要在html中嵌入即可: <!DOCTYPE html> <html> <head> <scri ...
- DDD实战让中台和微服务的落地如虎添翼
微服务到底怎么拆分和设计才算合理,拆多小才叫微服务?有没有好的方法来指导微服务和中台的设计呢? 深入DDD的核心知识体系与设计思想,带你掌握一套完整而系统的基于DDD的微服务拆分与设计方法,助力落地边 ...
- redhat7.6 Tomcat下安装 Jenkins 安装wget文件下载
安装wget下载工具 # 查看是否安装wget rpm -qa | grep wget #使用yum安装wget yum -y install wget 使用wget工具下载到 /usr/share ...
- shell脚本 4 函数与正则
shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式 func() { #指定函数名 ...
- SpringBoot-容器启动的时候执行一些内容
SpringBoot的ApplicationRunner.CommandLineRunner 场景: 在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的. ...
- 【Redis破障之路】二:Redis安装和基本数据结构
1.安装Redis Redis6.0在2020年已经发布,所以我们安装Redis3.0. 1.1.在Linux上安装Redis 我们在CentOS上安装Redis.常见的的有三种安装方式: yum/a ...
- 记canvas画笔笔迹的多次优化过程
我们的项目是面向学校老师的教学软件,所以肯定少不了互动白板的功能,而这个里面的画笔功能是由我来开发的,下面介绍这个过程中遇到的问题以及解决方法. 首先给大家明确下由于软件中的画布可以自由移动,会超出屏 ...
- pc/shouji/weixin判断跳转
pc 和 手机端 判断 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android&q ...
- 【主从复制】MySQL主从复制的原理
1. 存在几个线程: 主库一个线程,从库两个线程 2.主库生成一个log dump线程,和从库IO线程交互 3.IO线程请求主库binlog,写入到中继日志relay log 4.SQL线程读取中继日 ...
- 缓冲区溢出分析第08课:MS06-040漏洞研究——动态调试
前言 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 编写漏洞利用程序的框架 这里我使用的是VC++6.0进行编写,需要将包含有漏洞的netapi32 ...