GBase 8a函数find_in_set使用样例

本文介绍GBase 8a内置函数find_in_set的使用方法并提供样例。该函数用于在一个逗号分割的集合中,查找指定的值是否存在。

参考

GBase 8a字符串和日期函数列表索引

语法

FIND_IN_SET(str,strlist)

说明

返回字符串 str 在 strlist 中对应的位置,以逗号间的字符串为一个单元。请注意区分该函数和instr函数的区别,instr是以字符为单位的,这个是以逗号间的内容为单位的。

  • 参数 strlist 由字符“,”分隔的多个子串组成;
  • 如果字符串 str 在 strlist 中,则返回匹配的位置,从 1 开始;
  • 如果字符串 str不在 strlist 中或者 strlist 是一个空串,返回值为 0;
  • 如果 str 为 NULL,返回值为NULL,不能同任何值进行同等比较;
  • 如果str为分隔符逗号,同样返回0

样例

普通查找

返回的是字符串在集合中出现的第几个,注意不是字符位置。

gbase> select find_in_set('b','a,b,c,d,e,f,g');
+----------------------------------+
| find_in_set('b','a,b,c,d,e,f,g') |
+----------------------------------+
|                                2 |
+----------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select find_in_set('a','a,b,c,d,e,f,g');
+----------------------------------+
| find_in_set('a','a,b,c,d,e,f,g') |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select find_in_set('f','a,b,c,d,e,f,g');
+----------------------------------+
| find_in_set('f','a,b,c,d,e,f,g') |
+----------------------------------+
|                                6 |
+----------------------------------+
1 row in set (Elapsed: 00:00:00.00)

查看逗号

gbase> select find_in_set(',','a,b,c,d,e,f,g');
+----------------------------------+
| find_in_set(',','a,b,c,d,e,f,g') |
+----------------------------------+
|                                0 |
+----------------------------------+
1 row in set (Elapsed: 00:00:00.01)

查找不存在的

如下在abc里查找b, 如果是instr肯定符合,但find_in_set是以逗号间的所有字符为单位,所以没找到。

gbase> select find_in_set('b','abc');
+------------------------+
| find_in_set('b','abc') |
+------------------------+
|                      0 |
+------------------------+
1 row in set (Elapsed: 00:00:00.00)