更新时间:2025-10-23 GMT+08:00
行表达式
行比较允许使用以下操作符=、<>、<、<=、>、>=。暂不支持<=>等操作符,或其中一个相似的语义符。
语法如下:
row_constructor operator row_constructor
- 操作符两边都是一个行构造器,两行值必须具有相同数目的字段,每一行都进行比较。
- 支持的数据类型和比较操作符一致。
<、<=、>、>=
在<、<=、>、>=的情况下,行中元素从左到右依次比较,直到遇到一对不相等的元素或者一对为空的元素。如果这对元素中存在至少一个null值,则比较结果是未知的null,否则这对元素的比较结果为最终的结果。如果最终没有匹配到不相等或者为空的元素,则认为这两行值相等,根据操作符含义判断最终结果。
示例:
m_db=# SELECT (1,2,NULL) < (1,3,0) AS RESULT;
result
----------
t
(1 row)
m_db=# SELECT (4,5,6) > (3,2,1) AS RESULT;
result
--------
t
(1 row)
m_db=# SELECT (4,1,1) > (3,2,1) AS RESULT;
result
--------
t
(1 row)
m_db=# SELECT ('TEST','DATA') > ('DATA','DATA') AS RESULT;
result
--------
t
(1 row)
m_db=# SELECT (4,1,1) > (3,2,NULL) AS RESULT;
result
--------
t
(1 row)
m_db=# SELECT (NULL,1,1) > (3,2,1) AS RESULT;
result
--------
(1 row)
m_db=# SELECT (NULL,5,6) > (NULL,5,6) AS RESULT;
result
--------
(1 row)
m_db=# SELECT (4,5,6) > (4,5,6) AS RESULT;
result
--------
f
(1 row)
m_db=# SELECT (2,2,5) >= (2,2,3) AS RESULT;
result
--------
t
(1 row)
m_db=# SELECT (2,2,1) <= (2,2,3) AS RESULT;
result
--------
t
(1 row)
=、<>
=、<>和别的操作符使用略有不同。如果两行值的所有字段都是非空并且符合操作符条件,则认为两行是符合操作符条件的;如果两行值的任意字段为非空并且不符合操作符条件,则认为两行是不符合操作符条件的;如果两行值的任意字段为空,则比较的结果是未知的null。
示例:
m_db=# SELECT (1,2,3) = (1,2,3) AS RESULT; result -------- t (1 row) m_db=# SELECT (1,2,3) <> (2,2,3) AS RESULT; result -------- t (1 row) m_db=# SELECT (2,2,3) <> (2,2,NULL) AS RESULT; result -------- (1 row) m_db=# SELECT (NULL,5,6) <> (NULL,5,6) AS RESULT; result -------- (1 row)
父主题: 表达式