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 ...
随机推荐
- Nacos 2.0 正式发布,性能提升了 10 倍!!
前不久,在3月20号,Nacos 2.0.0 正式发布了!我简单看了下官方的介绍,可能nacos未来逐渐会成为各大公司作为服务治理和配置中心的主要中间件. Nacos 简介:一个更易于构建云原生应用的 ...
- 一文教你搞懂 Go 中栈操作
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/513 本文使用的go的源码15.7 知识点 LInux 进程在内存布 ...
- 全网最详细的新手入门Mysql命令和基础,小白必看!
MySQL简介 什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是 ...
- servlet学习(一)
Tomcat 注:以下资料摘自孙鑫的<sevlet/JSP深入详解>,仅用于个人学习使用. 一.web技术的发展 早期web是静态页面的浏览,使用HTML编写,放入服务器. 1.1浏览器请 ...
- Spring Cloud 升级之路 - 2020.0.x - 3. Undertow 的 accesslog 配置
上一节我们讲述了如何使用 Undertow 作为我们的 Web 服务容器,本小节我们来分析使用 Undertow 的另一个问题,也就是如何配置 accesslog,以及 accesslog 的各种占位 ...
- C#补位函数PadLeft和PadRight
左边补位 PadLeft 用法: string str = "100"; str.PadLeft(5,'0') 输出:00100 右边补位 PadRight 用法: str.Pad ...
- springdata jpa之ddl-auto配置的属性
在jpa中ddl-auto一共有四种: 分别为: ddl-auto:create ----每次运行该程序,没有表格会新建表格,表内有数据会清空:ddl-auto:create-drop ----每次程 ...
- JAVA JNI 中解决在C/C++跨线程FindClass失败
在JAVA与C/C++交互时使用JNI接口: 先是在JAVA调用的C++方法中直接测试FindClass,使用获取到的jclass操作没有任何问题: 但是在调用的C++方法中起线程后,在线程中Find ...
- Effective Java 笔记
1. 静态工厂 静态工厂的第 5 个优点是,在编写包含该方法的类时,返回的对象的类不需要存在.他的意思是面向接口编程??就是说我们只需知道接口,具体实现类是否存在没有关系?? 只提供静态工厂方法的主要 ...
- red and black(BFS)
Red and Black Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 40685 Accepted: 22079 D ...