条件表达式函数

  • nvl(expr1, expr2)

    描述: 返回参数列表中第一个非NULL的参数值。

    示例:

    openGauss=# select "nvl"('abc'::text, NULL);
    nvl
    -----
    abc
    (1 row)
    
    openGauss=# select "nvl"(NULL, 'abc'::text);
    nvl
    -----
    abc
    (1 row)
    
    openGauss=# select "nvl"(NULL, NULL);
    ERROR:  could not determine polymorphic type because input has type "unknown"
    CONTEXT:  referenced column: nvl
    openGauss=# select "nvl"(NULL::text, NULL::text);
    nvl
    -----
    
    (1 row)
    

    备注:nvl因为在openGauss内核中被做成了语法,所以不加双引号引用会无法进行调用;该函数不能输入两个unknown类型,比如"nvl"(NULL, NULL)或者"nvl"('abc', NULL)的用法都会报错.

  • nvl2(expr1, expr2, expr3)

    描述: 返回参数列表中第二个非NULL的参数。

    示例:

    openGauss=# select nvl2(NULL, NULL, NULL);
    ERROR:  could not determine polymorphic type because input has type "unknown"
    CONTEXT:  referenced column: nvl2
    openGauss=# select nvl2('abc'::text, NULL, NULL);
    nvl2
    ------
    
    (1 row)
    
    openGauss=# select nvl2('abc'::text, 'def'::text, NULL);
    nvl2
    ------
    def
    (1 row)
    
    openGauss=# select nvl2(NULL, 'def'::text, NULL);
    nvl2
    ------
    
    (1 row)
    
    openGauss=# select nvl2(NULL, 'def'::text, 'ghi'::text);
    nvl2
    ------
    ghi
    (1 row)
    

    备注:该函数不能输入两个unknown类型,比如"nvl"(NULL, NULL)或者"nvl"('abc', NULL)的用法都会报错。

  • public.decode(expr1, expr2, result1 ,…)

    描述: 使用expr1和expr2进行比较,如果expr1与expr2匹配,则返回result1,否则返回NULL。即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else {
        return null;
    }
    ```
    

    该函数支持最多4个分支,所以可以有以下用法:

    decode(expr1, expr2, result1, result2)就表示当expr1与expr2不匹配时,返回result2,即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else {
        return result2;
    }
    ```
    

    decode(expr1, expr2, result1, expr3, result2)就表示当expr1与expr3匹配时返回result2,即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else if (expr1 == expr3) {
        return result2;
    } else {
        return null;
    }
    ```
    

    decode(expr1, expr2, result1, expr3, result2, result3)就表示当expr1与expr2和expr3都不匹配时返回result3,即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else if (expr1 == expr3) {
        return result2;
    } else {
        return result3;
    }
    ```
    

    decode(expr1, expr2, result1, expr3, result2, expr4, result3)就表示当expr1与expr4匹配时返回result3,即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else if (expr1 == expr3) {
        return result2;
    } else if (expr1 == expr4) {
        return result3;
    } else {
        return null;
    }
    ```
    

    decode(expr1, expr2, result1, expr3, result2, expr4, result3, result4)就表示当expr1与expr2、expr3、expr4都不匹配时,返回result4,即:

    ```
    if (expr1 == expr2) {
        return result1;
    } else if (expr1 == expr3) {
        return result2;
    } else if (expr1 == expr4) {
        return result3;
    } else {
        return result4;
    }
    ```
    

    其中expr可以是任意类型,result则是text、bpchar、integer、bigint、numeric、time、timestamp、timestamptz类型。

    示例:

    openGauss=# select public.decode('c'::bpchar, 'a'::bpchar,'postgres'::bpchar);
    decode
    --------
    
    (1 row)
    
    openGauss=# select public.decode('a'::bpchar, 'a'::bpchar,'postgres'::bpchar,'default value'::bpchar);
    decode
    ----------
    postgres
    (1 row)
    
    openGauss=# select public.decode('c', 'a'::bpchar,'postgres'::bpchar,'default value'::bpchar);
        decode
    ---------------
    default value
    (1 row)
    
    openGauss=# select public.decode('a'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar);
    decode
    ----------
    postgres
    (1 row)
    
    openGauss=# select public.decode('d'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar);
    decode
    --------
    
    (1 row)
    
    openGauss=# select public.decode('a'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar,'default value'::bpchar);
    decode
    ----------
    postgres
    (1 row)
    
    openGauss=# select public.decode('d'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar,'default value'::bpchar);
        decode
    ---------------
    default value
    (1 row)
    
    openGauss=# select public.decode('a'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar, 'c'::bpchar, 'system'::bpchar);
    decode
    ----------
    postgres
    (1 row)
    
    openGauss=# select public.decode('d'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar, 'c'::bpchar, 'system'::bpchar);
    decode
    --------
    
    (1 row)
    
    openGauss=# select public.decode('a'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar, 'c'::bpchar, 'system'::bpchar,'default value'::bpchar);
    decode
    ----------
    postgres
    (1 row)
    
    openGauss=# select public.decode('d'::bpchar, 'a'::bpchar,'postgres'::bpchar,'b'::bpchar,'database'::bpchar, 'c'::bpchar, 'system'::bpchar,'default value'::bpchar);
        decode
    ---------------
    default value
    (1 row)
    
    openGauss=# select public.decode(NULL, 'a'::bpchar, 'postgres'::bpchar, NULL,'database'::bpchar);
    decode
    ----------
    database
    (1 row)
    
    openGauss=# select public.decode(NULL, 'a'::bpchar, 'postgres'::bpchar, 'b'::bpchar,'database'::bpchar);
    decode
    --------
    
    (1 row)
    
    openGauss=# select public.decode(NULL, 'a'::bpchar, 'postgres'::bpchar, NULL,'database'::bpchar,'default value'::bpchar);
    decode
    ----------
    database
    (1 row)
    
    openGauss=# select public.decode(NULL, 'a'::bpchar, 'postgres'::bpchar, 'b'::bpchar,'database'::bpchar,'default value'::bpchar);
        decode
    ---------------
    default value
    (1 row)
    
意见反馈
编组 3备份
    openGauss 2024-04-27 00:42:13
    取消