原文链接: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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。