SQL CASE表达式是一种通用的条件表达式,类似于其它编程语言中的 if/else 语句:
CASE WHEN condition THEN result
[WHEN …]
[ELSE result]
END
CASE子句可以用于任何表达式可以出现的地方。每一个condition是一个返回boolean结果的表达式。如果结果为真,那么CASE表达式的结果就是符合条件的result,并且剩下的CASE表达式不会被处理。如果条件的结果不为真,那么以相同方式搜寻任何随后的WHEN子句。如果没有WHEN condition为真,那么CASE表达式的值就是在ELSE子句里的result。如果省略了ELSE子句而且没有条件为真,结果为空。
postgres=# SELECT * FROM t_1 ORDER BY 1, 2;
num | name
1 | a
2 | b
3 | c
4 | a
(4 rows)
postgres=# SELECT num,
postgres-# CASE num WHEN 1 THEN 'one'
postgres-# WHEN 2 THEN 'two'
postgres-# WHEN 3 THEN 'three'
postgres-# ELSE 'other'
postgres-# END
postgres-# FROM t_1
postgres-# ORDER BY 1, 2;
num | case
1 | one
2 | two
3 | three
4 | other
(4 rows)
所有result表达式的数据类型都必须可以转换成单一的输出类型。
COALESCE
COALESCE(value [, …])
COALESCE函数返回它的第一个非空参数的值。当且仅当所有参数都为空时才会返回空。它常用于在为显示目的检索数据时用缺省值替换空值。
postgres=# SELECT coalesce(NULL, NULL, num) FROM t_1 order by 1;
coalesce
(4 rows)
和CASE表达式一样,COALESCE将不会 计算无助于判断结果的参数;也就是说,在第一个非空参数右边的参数不会被计算。这个 SQL 标准函数提供了类似于NVL和IFNULL的能力,它们被用在某些其他数据库系统中。
NULLIF
NULLIF(value1, value2)
当value1和value2相等时,NULLIF返回一个空值。 否则它返回value1。 这些可以用于执行前文给出的COALESCE例子的逆操作:
postgres=# SELECT nullif(num::text, name) FROM t_1 order by 1;
nullif
(4 rows)
GREATEST和LEAST
GREATEST(value [, …])
LEAST(value [, …])
GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。 这些表达式必须都可以转换成一个普通的数据类型,它将会是结果类型 。列表中的 NULL 数值将被忽略。只有所有表达式的结果都是 NULL 的时候,结果才会是 NULL。
请注意GREATEST和LEAST都不是 SQL 标准,但却是很常见的扩展。某些其他数据库让它们在任何参数为 NULL 时返回 NULL,而不是在所有参数都为 NULL 时才返回 NULL。
语法:RETURN expression;
表达式
RETURN用于终止函数并把expression的值返回给调用者。这种形式用于不返回集合数据(数据集)的PL/pg
SQL
函数。
(1)如果函数返回一个标量类型,
表达式
结果将自动转行成函数的返回类型。但要返回一个复合(行)值,必须写一个所需列集合的
表达式
。
createorreplac..
以上这些都是在
PostgreSQL
中常用的拼接字符串方法。根据具体情况,你可以选择适合自己的方法来拼接字符串。使用concat_ws()函数可以合并多个字符串,并通过指定分隔符来分隔这些字符串。使用format()函数可以格式化字符串,并将多个字符串合并为一个字符串。使用concat()函数可以合并两个或多个字符串。使用||运算符也可以合并两个或多个字符串。
这篇写的是postgres,但是实际上我简单试了对于my
sql
也是适用的.先简单介绍下背景,这是前几天线上的一个真实bug. 很久之前产品经理要求某个列表页排除某些类型,开发一气呵成写完上线,非常完美,突然前几天产品说现在不需要排除这几个类别了,就把要排除的配置项给清空了,结果发现列表页也空了,造成大事故啊。图文无关我检查发现问题代码大致如下const products = models.Prod...
一、
postgresql
中
条件
表达式
今天上班的时候,有一个哥们跑过来问我,pg有没有行转列的函数,如何实现行转列,他说他pg中没有找到,问我知道不,我想了一下,好像有,不过不像
SQL
server 那么好用,但行转列很简单啊,使用多个union all 就简单搞定了啊,于是他给我看了他的问题
select id,a,b,c,d,e,f,g
from biztable;
想比较 a,b,c,d,e...
本文学习
PostgreSQL
COALESCE 和 NULLIF函数。COALESCE它返回第一个非空参数,并通过示例让你了解如何在select语句中有效处理空值。NULLIF需要两个参数,参数相同返回null,否则返回第一个参数。通过同时学习两个函数,可以区分两者,同时可以组合使用,增强你
SQL
的健壮性。
PostgreSQL
COALESCE 函数语法
COALESCE 函数语法:
COALESCE (argument_1, argument_2, …);
参数可以有无限个,总是返回第一个.
2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》
3、
PostgreSQL
数据库仓库链接,点击前往
4、日本著名
PostgreSQL
数据库专家 铃木启修 网站主页,点击前往
5、参考书籍:《
PostgreSQL
中文手册》
6、参考书籍:《
PostgreSQL
指南:内幕探索》,点击前往
7、参考书籍:《事务处理 概念与技术》
8、
PostgreSQL
数据库仓库链接,.