南大通用GBase 8s 的FIND_IN_SET函数介绍

4 阅读2分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

什么是 FIND_IN_SET?
FIND_IN_SET() 用于在逗号分隔的字符串列表中查找指定字符串位置的函数。它的主要用途是处理以逗号分隔的值列表(CSV格式)。

基本语法

FIND_IN_SET(search_string, string_list)
参数说明:
search_string:要查找的字符串
string_list:逗号分隔的字符串列表

 

简单示例

注:以下用例在GBase8sV8.8_AEE_3.6.5_RC2_MY_2_8107a4版本中运行

示例1:基础查找

--查找字符串在列表中的位置
> SELECT FIND_IN_SET('b', 'a,b,c,d');-- 返回 2
(EXPRESSION)
          2
1 row(s) retrieved.
> SELECT FIND_IN_SET('e', 'a,b,c,d');-- 返回 0(未找到)
(EXPRESSION)
          0
1 row(s) retrieved.
> SELECT FIND_IN_SET('', 'a,b,c,d');-- 返回 0(空字符串)
(EXPRESSION)
          0
1 row(s) retrieved.
> SELECT FIND_IN_SET('b', 'a,bc,d'); -- 返回 0(bc ≠ b)
(EXPRESSION)
          0
1 row(s) retrieved.
> SELECT FIND_IN_SET(NULL, 'a,b,c,d');  -- 返回 NULL
(EXPRESSION)
1 row(s) retrieved.
> SELECT FIND_IN_SET('b', NULL);  -- 返回 NULL
(EXPRESSION)

1 row(s) retrieved.

示例2:应用场景举例


-- 创建用户表,tags字段存储用逗号分隔的兴趣标签
CREATE TABLE users (
   id INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(50),
   tags VARCHAR(255)  -- 存储如 "音乐,电影,运动,阅读"
);
INSERT INTO users (name, tags) VALUES
('张三', '音乐,电影,运动'),
('李四', '编程,阅读,游戏'),
('王五', '运动,旅游,摄影'),
('赵六', '电影,美食,阅读,音乐'),
('钱七', '编程,运动,电影');
-- 查找既喜欢"音乐"又喜欢"电影"的用户
> SELECT * FROM users
WHERE FIND_IN_SET('音乐', tags) > 0
 AND FIND_IN_SET('电影', tags) > 0;

ID    1
NAME  张三
TAGS  音乐,电影,运动
ID    4
NAME  赵六
TAGS  电影,美食,阅读,音乐
2 row(s) retrieved.
-- 将"电影"标签排在前面的用户优先显示
> SELECT 
   id,
   name,
   tags,
   FIND_IN_SET('电影', tags) as movie_position  FROM users  WHERE FIND_IN_SET('电影', tags) > 0 ORDER BY FIND_IN_SET('电影', tags);
ID              4
NAME            赵六
TAGS            电影,美食,阅读,音乐
MOVIE_POSITION  1
ID              1
NAME            张三
TAGS            音乐,电影,运动
MOVIE_POSITION  2
ID              5
NAME            钱七
TAGS            编程,运动,电影
MOVIE_POSITION  3
3 row(s) retrieved.

以上,如果您在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为您提供支持!

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。