更新时间:2025-09-12 GMT+08:00
分享

比较函数和比较操作符

比较操作符用于对两个数据的大小进行比较,并返回一个布尔类型的值。

比较操作符均为二元运算符,详见表1。M-Compatibility模式下提供的比较操作符请参见表1

  • 不等于的计算优先级高于等于。
  • M-Compatibility模式下目前只支持btree索引和ubtree索引。
  • <>和<=>不支持索引扫描。
  • <=>不支持hash连接和合并连接。
  • <=>不支持行比较。
  • <、<=、=、>=、>、<>操作符支持行表达式与NULL值比较。
  • 支持含有0字符的操作数(字符串类型、二进制类型、位串类型)进行<、>、<=、>=、=、!=、<>、<=>及BETWEEN AND操作。
  • IS NULL、ISNULL操作支持行表达式作为参数使用。
m_db=# SELECT (1,2) <=> row(2,3);
ERROR:  could not determine interpretation of row comparison operator <=>
LINE 1: select (1,2) <=> row(2,3);
                     ^
HINT:  unsupported operator.
m_db=# SELECT (1,2) < NULL;
 ?column? 
----------

(1 row)

m_db=# SELECT (1,2) <> NULL;
 ?column? 
----------

(1 row)
m_db=# SELECT (1, 2)  IS NULL;
 ?column? 
----------
 f
(1 row)

m_db=# SELECT ISNULL((1, 2));
 ?column? 
----------
 f
(1 row)

比较操作符

  • <操作符

    描述:小于操作。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 2 < 2;
     ?column? 
    ----------
     f
    (1 row)
    
  • >操作符

    描述:大于操作符。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 2 > 2;
     ?column? 
    ----------
     f
    (1 row)
    
  • <=操作符

    描述:小于等于操作符。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 0.1 <= 0.2;
     ?column? 
    ----------
     t
    (1 row)
    
  • >=操作符

    描述:大于等于操作符。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 2 >= 2;
     ?column? 
    ----------
     t
    (1 row)
    
  • =操作符

    描述:等于操作符。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 2 = 2;
     ?column? 
    ----------
     t
    (1 row)
    
  • <>或!=操作符

    描述:不等于操作符。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 1 <> 2;
     ?column? 
    ----------
     t
    (1 row)
    
  • <=>操作符

    描述:NULL安全等于操作符,此操作符执行与=操作符类似的相等比较,但NULL与NULL进行NULL安全等于比较时返回t,否则返回f。

    示例:

    1
    2
    3
    4
    5
    m_db=# SELECT 1 <=> 1, 1 <=> NULL, NULL <=> NULL;
     ?column? | ?column? | ?column? 
    ----------+----------+----------
     t        | f        | t
    (1 row)
    
  • BETWEEN AND操作符

    描述:判断操作数1是否大于等于操作数2且小于等于操作数3

    示例:

    1
    2
    3
    4
    5
    m_db=# select 2 between 1 and 3;
     ?column? 
    ----------
     t
    (1 row)
    
  • IS操作符
    expr IS boolean_value

    描述:判断expr是否等价于boolean_value,如果等价则返回真(t),否则返回假(f)。其中boolean_value可以是TRUE、FALSE、NULL或UNKNOWN。

    示例:

    m_db=# SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
     is true | is false | ?column? 
    ---------+----------+----------
     t       | t        | t
    (1 row)
  • IS NOT操作符
    expr IS NOT boolean_value

    描述:判断expr是否不等价于boolean_value,如果不等价则返回真(t),否则返回假(f)。其中boolean_value可以是TRUE、FALSE、NULL或UNKNOWN。

    示例:

    m_db=# SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
     ?column? | ?column? | ?column? 
    ----------+----------+----------
     t        | t        | f
    (1 row)
  • IS NOT NULL操作符
    expr IS NOT NULL

    描述:判断expr是否为非NULL。如果是则返回真(t),否则返回假(f)。

    示例:

    m_db=# SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
     ?column? | ?column? | ?column? 
    ----------+----------+----------
     t        | t        | f
    (1 row)
  • IS NULL操作符
    expr IS NULL

    描述:判断expr是否为NULL。如果是则返回真(t),否则返回假(f)。

    示例:

    m_db=# SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
     ?column? | ?column? | ?column? 
    ----------+----------+----------
     f        | f        | t
    (1 row)

比较函数

  • COALESCE(value1, value2, ...)

    描述:返回参数列表中第一个非NULL值。如果没有非NULL值,该函数返回空值。

    返回值类型:由类型推导矩阵决定,会根据入参的类型决定返回值类型。

    示例:

    m_db=# SELECT COALESCE(NULL, 1);
     coalesce 
    ----------
            1
    (1 row)
    
    m_db=# SELECT COALESCE(NULL, NULL, NULL);
     coalesce 
    ----------
    
    (1 row)
  • GREATEST(value1, value2, ...)

    描述:返回参数列表中的最大值。

    参数:至少需要两个参数。

    示例:

    m_db=# SELECT GREATEST(34.0, 3.0, 5.0, 767.0);
     greatest 
    ----------
        767.0
    (1 row)
    
    m_db=# SELECT GREATEST('B', 'A', 'C');
     greatest 
    ----------
     C
    (1 row)
  • INTERVAL(N, N1, N2, N3, ...)

    描述:返回N与其他参数组成的列表(N1,N2,N3,...)的比较情况。

    参数:至少需要两个参数,所有传入的参数被视为数字类型。

    返回值类型:SMALLINT

    • 如果N为NULL,则返回-1。
    • 如果N<N1,则返回0。
    • 如果存在正整数j,对于任意正整数i≤j,都有N­­i≤N≤Nj+1,则返回j。

    示例:

    m_db=# SELECT INTERVAL(24, 2, 5, 14, 26, 28, 46);
     interval 
    ----------
            3
    (1 row)
    
    m_db=# SELECT INTERVAL(24, 29, 5, 14);
     interval 
    ----------
            0
    (1 row)
  • ISNULL(expr)

    描述:如果参数expr为NULL,那么该函数返回t,否则返回f。

    参数:任意入参。

    返回值类型:BOOLEAN

    示例:

    m_db=# SELECT ISNULL('2023-01-01');
     isnull 
    --------
     f
    (1 row)
    
    m_db=# SELECT ISNULL(NULL);
     isnull 
    --------
     t
    (1 row)
  • LEAST(value1, value2, ...)

    描述:返回参数列表中的最小值。

    参数:至少需要两个参数。

    示例:

    m_db=# SELECT LEAST(34.0, 3.0, 5.0, 767.0);
     least 
    -------
       3.0
    (1 row)
    
    m_db=# SELECT LEAST('B', 'A', 'C');
     least 
    -------
     A
    (1 row)

相关文档