Skip to content

FIND_IN_SET

功能描述

在逗号分隔的字符串列表中查找指定字符串的位置。

语法格式

FIND_IN_SET(expr1,expr2)

参数说明

  • expr1: 要查找的字符串
  • expr2: 要搜索的逗号分隔的字符串列表

说明:

  • 如果expr1或expr2为NULL,则函数返回NULL值
  • 如果expr1不在expr2中,或者expr2是空字符串,则返回零
  • 如果expr1在expr2中,则返回一个正整数

函数返回类型

INTEGER数值类型

示例

  • 示例1
    基本使用。

    sql
    SELECT FIND_IN_SET('c', 'a,b,c,d');
    
    EXPR1|
    -----+
        3|

    上述示例结果返回3,因为c是列表的第3个元素。

  • 示例2
    在查询中使用。

    sql
    # 创建基础用例表
    CREATE TABLE tab_test (
    id VARCHAR(100)
    );
    
    #初始化用例表数据
    INSERT INTO tab_test (id) VALUES
    ('1,2,3'),
    ('2,4,6'),
    ('3,5,7'),
    ('4,6,8');
    
    # 在查询语句中使用FIND_IN_SET进行结果集过滤
    SELECT * FROM tab_test WHERE FIND_IN_SET('3', id) > 0;
    
    ID   |
    -----+
    1,2,3|
    3,5,7|

    上述示例表示查询表tab_test中包含3的所有记录。

  • 示例3
    与字段结合使用。

    sql
    # 创建基础用例表
    CREATE TABLE tab_test (
    id int NOT NULL,
    col_name varchar(255) NOT NULL,
    col_list varchar(255) NOT NULL,
    PRIMARY KEY (id)
    );
    
    # 初始化用例表数据
    INSERT INTO tab_test(id,col_name,col_list) VALUES (1, '张三', '张三,李四,王武,小王');
    INSERT INTO tab_test(id,col_name,col_list) VALUES (2, '李四', '张三,李四,王武');
    INSERT INTO tab_test(id,col_name,col_list) VALUES (3, '王武', '张三,李四');
    INSERT INTO tab_test(id,col_name,col_list) VALUES (4, '小王', '张三');
    
    # 在查询语句中使用FIND_IN_SET进行结果集过滤
    SELECT * FROM tab_test WHERE FIND_IN_SET(col_name,col_list) > 0;
    
    ID|COL_NAME|COL_LIST      |
    --+-----+-----------+
    1|张三   |张三,李四,王武,小王|
    2|李四   |张三,李四,王武   |

    上述示例表示查询表tab_test中col_list列包含col_name的所有记录。