首页 > 学院 > 开发设计 > 正文

Postgresql 条件表达式

2019-11-08 20:30:15
字体:
来源:转载
供稿:网友

条件表达式

PostgreSQL中可用的SQL兼容的条件表达式。

如果你的需求超过这些条件表达式的能力,你可能会希望用一种更富表现力的编程语言写一个存储过程

CASE

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子句而且没有条件为真,结果为空。

-- Example: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函数返回它的第一个非空参数的值。当且仅当所有参数都为空时才会返回空。它常用于在为显示目的检索数据时用缺省值替换空值。

--Examplepostgres=# SELECT coalesce(NULL, NULL, num) FROM t_1 order by 1; coalesce ---------- 1 2 3 4(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 -------- 1 2 3 4(4 rows)

GREATEST和LEAST

GREATEST(value [, …]) LEAST(value [, …]) GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。 这些表达式必须都可以转换成一个普通的数据类型,它将会是结果类型 。列表中的 NULL 数值将被忽略。只有所有表达式的结果都是 NULL 的时候,结果才会是 NULL。

请注意GREATEST和LEAST都不是 SQL 标准,但却是很常见的扩展。某些其他数据库让它们在任何参数为 NULL 时返回 NULL,而不是在所有参数都为 NULL 时才返回 NULL。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表