更新时间:2024-11-01 GMT+08:00
分享

行表达式

语法如下:

row_constructor operator row_constructor

两边都是一个行构造器,两行值必须具有相同数目的字段,每一行都进行比较,行比较允许使用=,<>,<,<=,>=等操作符,或其中一个相似的语义符。

对于<,<=,>,> =的情况下,行中元素从左到右依次比较,直到遇到一对不相等的元素或者一对为空的元素。如果这对元素中存在至少一个null值,则比较结果是未知的(null),否则这对元素的比较结果为最终的结果。如果最终没有遇到不相等或者为空的元素,则认为这两行值相等,根据操作符含义判断最终结果。

不支持对XML类型数据操作。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
openGauss=# SELECT ROW(1,2,NULL) < ROW(1,3,0) AS RESULT;
  result
----------
 t
(1 row)

openGauss=# select (4,5,6) > (3,2,1) as result;
 result 
--------
 t
(1 row)

openGauss=# select (4,1,1) > (3,2,1) as result;
 result 
--------
 t
(1 row)

openGauss=# select ('test','data') > ('data','data') as result;
 result 
--------
 t
(1 row)

openGauss=# select (4,1,1) > (3,2,null) as result;
 result 
--------
 t
(1 row)

openGauss=# select (null,1,1) > (3,2,1) as result;
 result 
--------

(1 row)

openGauss=# select (null,5,6) > (null,5,6) as result;
 result 
--------

(1 row)

openGauss=# select (4,5,6) > (4,5,6) as result;
 result 
--------
 f
(1 row)

openGauss=# select (2,2,5) >= (2,2,3) as result;
 result 
--------
 t
(1 row)

openGauss=# select (2,2,1) <= (2,2,3) as result;
 result 
--------
 t
(1 row)

=,<>和别的操作符使用略有不同。如果两行值的所有字段都是非空并且符合操作符条件,则认为两行是符合操作符条件的;如果两行值的任意字段为非空并且不符合操作符条件,则认为两行是不符合操作符条件的;如果两行值的任意字段为空,则比较的结果是未知的(null)。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
openGauss=# select (1,2,3) = (1,2,3) as result;
 result 
--------
 t
(1 row)

openGauss=# select (1,2,3) <> (2,2,3) as result;
 result 
--------
 t
(1 row)

openGauss=# select (2,2,3) <> (2,2,null) as result;
 result 
--------

(1 row)

openGauss=# select (null,5,6) <> (null,5,6) as result;
 result 
--------

(1 row)

相关文档