南大通用GBase 8a 数组选择函数ELT和Field的使用和样例

本文介绍GBase 8a数据库集群内置函数ELT和FIELD的使用语法、说明和例子。这2个函数都是从一系列字符串中根据位置找字符串或者根据字符串找位置。

ELT

语法

ELT(N,str1,str2,str3,...) 

说明

若 N=1,则返回值为 str1,若 N=2,则返回值为 str2,以此类推。
若 N 小于 1 或大于参数的数目,则返回值为 NULL。

样例

正常查询

N=1,则返回值第一个字符串的值,为 str1。

gbase> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo') FROM t;
+------------------------------------+
| ELT(1, 'ej', 'Heja', 'hej', 'foo') |
+------------------------------------+
| ej                                 |
+------------------------------------+
1 row in set (Elapsed: 00:00:00.03)

N=4,则返回值为 str4。

gbase> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo') FROM t;
+------------------------------------+
| ELT(4, 'ej', 'Heja', 'hej', 'foo') |
+------------------------------------+
| foo                                |
+------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

超过参数范围

返回值为 NULL。

gbase> SELECT ELT(9, 'ej', 'Heja', 'hej', 'foo') FROM t;
+------------------------------------+
| ELT(9, 'ej', 'Heja', 'hej', 'foo') |
+------------------------------------+
| NULL |
+------------------------------------+
1 row in set
gbase> select elt(-1,1,2,3,4,5,6,7,8);
+-------------------------+
| elt(-1,1,2,3,4,5,6,7,8) |
+-------------------------+
| NULL                    |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select elt(null,1,2,3,4,5,6,7,8);

NULL参数

返回NULL

gbase> select elt(null,1,2,3,4,5,6,7,8);
+---------------------------+
| elt(null,1,2,3,4,5,6,7,8) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

FIELD

语法

FIELD(str,str1,str2,str3,...)

说明

查找字符串所在的索引位置。

如果 str 等于 str1 则返回 1,如果 str 等于 str2 则返回 2,依次向后进行比较。都不相等时,返回值为 0。
如果所有对于 FIELD()的参数均为字符串,则所有参数均按照字符串进行比较。
如果所有的参数均为数字,则按照数字进行比较。
如果 str 为 NULL,则返回值为 0,原因是 NULL 不能同任何值进行同等比较。FIELD()是 ELT()的补数。

样例

正常查询

gbase> SELECT FIELD('ej', 'ej', 'Heja', 'hej', 'foo') FROM t;
+-----------------------------------------+
| FIELD('ej', 'ej', 'Heja', 'hej', 'foo') |
+-----------------------------------------+
|                                       1 |
+-----------------------------------------+
1 row in set (Elapsed: 00:00:00.01)

没有找到

返回值为 0。

gbase> SELECT FIELD('ej2', 'ej', 'Heja', 'hej', 'foo') FROM t;
+------------------------------------------+
| FIELD('ej2', 'ej', 'Heja', 'hej', 'foo') |
+------------------------------------------+
|                                        0 |
+------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

参数为NULL

即使数据里有NULL,也是返回NULL,因为null不能和任何值相等比较。

gbase> SELECT FIELD(null, 'ej', 'Heja', 'hej', 'foo',null) FROM t;
+----------------------------------------------+
| FIELD(null, 'ej', 'Heja', 'hej', 'foo',null) |
+----------------------------------------------+
|                                            0 |
+----------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

参考

请注意区分该函数和decode函数的区别。decode是成对出现的key-value的,而elt更趋向于下标访问。

GBase 8a字符串和日期函数汇总列表