文档首页 > > 开发指南> SQL参考> 函数和操作符> 条件表达式函数

条件表达式函数

分享
更新时间: 2019/06/24 GMT+08:00

条件表达式函数

  • 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)
  • 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)

    备注:

    如果两个参数的数据类型不同,则:

    • 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。如:
      SELECT nullif('1234'::VARCHAR,123::INT4);
       nullif 
      --------
         1234
      (1 row)
      SELECT nullif('1234'::VARCHAR,'2012-12-24'::DATE);
      ERROR:  invalid input syntax for type timestamp: "1234"
    • 若两种数据类型之间不存在隐式转换,则返回错误 。如:
      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 DUAL;
      ^
      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的两个参数不属于同类型时,看第二个参数是否可以向第一个参数进行隐式转换,如果可以则返回第一个参数类型。如果第二个参数不能向第一个参数进行隐式转换而第一个参数可以向第二个参数进行隐式转换,则返回第二个参数的类型。如果两个参数之间不存在隐式类型转换并且也不属于同一类型则报错。

  • sys_context( 'namespace' , 'parameter')

    描述:获取并返回指定namespace下参数parameter的值。

    返回值类型:VARCHAR

    示例:

    SELECT sys_context('USERENV', 'CURRENT_SCHEMA');
     sys_context 
    -------------
     public
    (1 row)

    根据当前所在的实际schema而变化。

    备注:目前仅支持SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') 和SYS_CONTEXT('USERENV', 'CURRENT_USER')两种格式。

  • greatest(expr1 [, ...])

    描述:获取并返回参数列表中值最大的表达式的值。

    返回值类型:

    示例:

    SELECT greatest(1*2,2-3,4-1);
     greatest 
    ----------
            3
    (1 row)
    
    SELECT greatest('HARRY', 'HARRIOT', 'HAROLD');
     greatest 
    ----------
     HARRY
    (1 row)
  • least(expr1 [, ...])

    描述:获取并返回参数列表中值最小的表达式的值。

    示例:

    SELECT least(1*2,2-3,4-1);
     least 
    -------
        -1
    (1 row)
    
    SELECT least('HARRY','HARRIOT','HAROLD');
     least  
    --------
     HAROLD
    (1 row)
  • EMPTY_BLOB()

    描述:使用EMPTY_BLOB在INSERT或UPDATE语句中初始化一个BLOB变量,取值为NULL。

    返回值类型:BLOB

    示例:

    --新建表
    CREATE TABLE blob_tb(b blob,id int) DISTRIBUTE BY REPLICATION;
    --插入数据
    INSERT INTO date_type_blob VALUES (empty_blob(),1);
    --删除表
     DROP TAB blob_tb;

    备注:使用DBMS.GETLENGTH求得的长度为0。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区