Mysql 在where子句中操纵字符串

Mysql 在where子句中操纵字符串,mysql,sql,Mysql,Sql,我有一个变量list_name,其中包含由“:”分隔的名称列表 list_name=(rahul:john:steve) => list_name is of type 'string' 该列表包含1000个名称 无法更改列表名称,因为我们从其他部门/公司获取它 要编写一个查询do以达到如下所示的目的,但需要对该字符串进行管理,即根据分隔符“:”从列表名称中提取名称 从学生中选择卷号 其中的名字是rahul、john或steve(问题部分) 建议在sql中使用一些字符串操作技术从字符串中

我有一个变量list_name,其中包含由“:”分隔的名称列表

list_name=(rahul:john:steve) => list_name is of type 'string'
该列表包含1000个名称 无法更改列表名称,因为我们从其他部门/公司获取它

要编写一个查询do以达到如下所示的目的,但需要对该字符串进行管理,即根据分隔符“:”从列表名称中提取名称

从学生中选择卷号 其中的名字是rahul、john或steve(问题部分)

建议在sql中使用一些字符串操作技术从字符串中提取名称


PS:我使用的是专有sql,不支持循环

您可以在标准sql中使用:

 select roll_no
 from students
 where concat(':', list_name, ':') like concat('%:', names, ':%')
在某些数据库中,where可能写为:

 where ':'+ list_name+':' like '%:'+names+':%'


您的第二版和第三版中有一些多余的括号。您不需要使用
SUBSTR()
跳过
列表名称的周围
()
字符吗?@Barmar。在最后两次查询中,意外地留下了额外的参数。要么整个表达式被包围,要么两者都没有。但是,
substr()
是不需要的,因为
like
只是忽略了它们(它们是通配符的一部分)。但是当你做concat时,你会得到
:(rahul:john:steve):“like%:rahul:%”
,它不会匹配。@Barmar。天哪,如果括号在字符串中,你是对的。我把它们理解为语法。在这种情况下,您肯定希望在连接冒号之前删除它们。
 where ':'|| list_name||':' like '%:'||names||':%'