本文介绍GBase 8a内置函数find_in_set的使用方法并提供样例。该函数用于在一个逗号分割的集合中,查找指定的值是否存在。
目录导航
参考
语法
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)