条件函数CASE/COALESCE/NULLIF/NVL/NVL2/GREATEST/LEAST) |
您所在的位置:网站首页 › pb和case的区别 › 条件函数CASE/COALESCE/NULLIF/NVL/NVL2/GREATEST/LEAST) |
下面介绍了在PolarDB PostgreSQL版(兼容Oracle)中可使用的与SQL语言兼容的条件表达式。 CASESQL语言的CASE表达式为一般条件表达式,类似于其它语言中的if/else语句: CASE WHEN condition THEN result [ WHEN ... ] [ ELSE result ] ENDCASE子句可使用于任何有效的表达式中。condition是一个返回BOOLEAN结果的表达式。如果结果为TRUE,那么CASE表达式的值就是条件后面的result。如果结果为FALSE,那么任何随后的WHEN子句都会以相同的行为进行搜索。如果没有WHEN condition为TRUE, 那么CASE表达式的值就是ELSE子句中的result。如果省略ELSE子句,且没有任何匹配的条件,结果就为NULL空值。 SELECT * FROM test; a --- 1 2 3 (3 rows) SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other (3 rows)所有result表达式的数据类型必须可转换为单一的输出类型。 下列“简单” CASE表达式是上述一般形式的一个指定变量: CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] ENDExpression将被计算并且和WHEN子句中所有指定的value进行比较,直到发现一个与之相等的结果。 如果没有发现匹配的信息,那么将返回ELSE子句中的result(或一个空值)。 上述示例可以用简单CASE语法进行编写: SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other (3 rows)CASE表达式不评估任何不用于决定结果的子表达式。例如,下面的方法是一种可能会避免除以零的无效结果: SELECT ... WHERE CASE WHEN x 0 THEN y/x > 1.5 ELSE false END;COALESCE函数COALESCE返回的是它第一个不是空值的参数。只有在所有参数都为空值的情况下,才会返回空值。 COALESCE(value [, value2 ] ... )当为了显示或更进一步的计算而取回数据时,通常都会用缺省值代替空值。例如: SELECT COALESCE(description, short_description, '(none)') ...像CASE表达式一样,COALESCE不会评估任何不用于决定结果的参数。也就是说,第一个非空参数右侧的参数将不被评估。SQL标准的函数提供类似于NVL和IFNULL的功能,这些功能可用于一些其它的数据库系统中。 NULLIF如果value1和value2相等,函数NULLIF返回空值,否则它返回value1。 NULLIF(valuel, value2)这个函数做出运算操作用和上面给出的关于函数COALESCE的示例正好相反: SELECT NULLIF(value1, '(none)') ...如果value1是(none),返回空值,否则返回参数value1的值。 NVL函数NVL返回的是它第一个非空值的参数。函数NVL评估的是第一个表达式。如果这个表达式被评估为NULL,那么函数NVL返回的则是第二个表达式。 NVL(exprl, expr2)返回的类型和参数类型是一样的。所有参数必须是相同的数据类型(或可以变为常用数据类型)。如果所有参数都为NULL,那么函数NVL返回的则是NULL空值。 下列示例为那些没有佣金的员工计算了佣金。如果员工有佣金,那么这个表达式返回的就是员工的佣金; 如果员工没有佣金,(也就是说,员工的佣金为NULL),那么这个表达式返回的就是佣金,金额为该员工薪水的10%。 bonus = NVL(emp.commission, emp.salary * .10)NVL2NVL2用于评估表达式,并返回第二个或第三个表达式,主要取决于第一个表达式的值。如果第一个表达式不是NULL,那么NVL2返回的就是expr2的值;如果第一个表达式为NULL,那么NVL2返回的则是expr3的值。 NVL2(expr1, expr2, expr3)返回的类型和参数类型是一致的。所有参数必须是相同的数据类型(或可以变为常用数据类型)。 下列示例计算了有佣金员工的佣金。如果指定的员工有佣金,那么这个表达式所返回的佣金数额相当于员工佣金的110%。 如果这个员工没有佣金(也就是说该员工的佣金为NULL),那么这个表达式返回的则是0。 bonus = NVL2(emp.commission, emp.commission * 1-1, 0)GREATEST和LEASTGREATEST和LEAST函数用于从任意数量的表达式中查询出最大或最小的数值。 GREATEST(value [, value2 ] ... ) LEAST(value [, value2 ] ... )表达式必须都可以转换成一个通用的数据类型,这个通用数据类型是结果的类型。而在列表中的空值是忽略的。只有所有的表达式计算值为空的时候,最后结果才为空值。 需要注意的函数GREATEST 和LEAST不在SQL标准中体现,而是一个当前普遍的扩展函数。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |