条件表达式函数
coalesce(expr1, expr2, …, exprn)
描述:
返回参数列表中第一个非NULL的参数值。
COALESCE(expr1, expr2) 等价于
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
。
示例:
执行查询语句:
SELECT coalesce(NULL,'hello');
结果显示为:
coalesce ---------- hello (1 row)
- 如果表达式列表中的所有表达式都等于NULL,则本函数返回NULL。
- 它常用于在显示数据时用缺省值替换NULL。
- 和CASE表达式一样,COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。
decode(base_expr, compare1, value1, Compare2,value2, … default)
描述:把base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。
示例:
执行查询语句:
SELECT decode('A','A',1,'B',2,0);
结果显示为:
case ------ 1 (1 row)
备注:不支持对xml数据类型的操作。
nullif(expr1, expr2)
描述:当且仅当expr1和expr2相等时,NULLIF才返回NULL,否则它返回expr1。
nullif(expr1, expr2) 逻辑上等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。
示例:
执行查询语句:
SELECT nullif('hello','world');
结果显示为:
nullif -------- hello (1 row)
- 不支持对xml数据类型的操作。
- 如果两个参数的数据类型不同,由以下两种情况。
- 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。
- 若两种数据类型之间不存在隐式转换,则返回错误。
示例1: 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。
执行入下查询语句:
SELECT nullif('1234'::VARCHAR,123::INT4); SELECT nullif('1234'::VARCHAR,'2012-12-24'::DATE);
结果依次显示为:
nullif -------- 1234 (1 row) ERROR: invalid input syntax for type timestamp: "1234"
示例2:若两种数据类型之间不存在隐式转换,则返回错误 。如:
执行如下查询语句:
SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE);
结果显示为:
ERROR: operator does not exist: boolean = timestamp without time zone LINE 1: SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE) FROM sys_dummy; ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
nvl( expr1 , expr2 )
描述:
- 如果expr1为NULL,则返回expr2。
- 如果expr1非NULL,则返回expr1。
示例:
执行查询语句:
SELECT nvl('hello','world');
结果显示为:
nvl ------- hello (1 row)
备注:参数expr1和expr2可以为任意类型,当NVL的两个参数不属于同类型时,看第二个参数是否可以向第一个参数进行隐式转换。如果可以则返回第一个参数类型,否则返回错误。
greatest(expr1 [, …])
描述:获取并返回参数列表中值最大的表达式的值。
返回值类型:
示例:
执行查询语句:
SELECT greatest(1*2,2-3,4-1);
结果显示为:
greatest ---------- 3 (1 row)
执行查询语句:
SELECT greatest('HARRY', 'HARRIOT', 'HAROLD');
结果显示为:
greatest ---------- HARRY (1 row)
备注:不支持对xml数据类型的操作。
描述:获取并返回参数列表中值最小的表达式的值。
示例:
执行查询语句:
SELECT least(1*2,2-3,4-1); SELECT least('HARRY','HARRIOT','HAROLD');
结果显示为:
least ------- -1 (1 row) least -------- HAROLD (1 row)
备注:不支持对xml数据类型的操作。
EMPTY_BLOB()
描述:使用EMPTY_BLOB在INSERT或UPDATE语句中初始化一个BLOB变量,取值为NULL。
返回值类型:BLOB
示例:
1、新建测试表。
CREATE TABLE blob_tb(b blob,id int);
2、插入测试数据。
INSERT INTO blob_tb VALUES (empty_blob(),1);
3、删除测试表。
DROP TABLE blob_tb;