MySQL检查数字是否在字符串字段中(数字以逗号分隔)

时间:2017-05-28 22:43:23

标签: mysql

在我的表格中我有

等子类别
id, name, subcat
1, "john", "4,8,34"
2, "jimmy", "8,32,4"
3, "elthon", "42"

如何做类似的事情 SELECT * FROM mytable WHERE 8 IN (subcat)

1 个答案:

答案 0 :(得分:1)

我首先想提一下....存储逗号分隔列表是一个SQL AntiPattern。我推荐Bill Karwin的优秀书籍“SQL反模式:避免数据库编程的陷阱”的第2章。在亚马逊及其他优秀书商中可以使用[https://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557]

要回答您提出的问题......使用格式良好的列表,我们可以使用MySQL FIND_IN_SET函数。作为演示

    FIND_IN_SET('8','4,8,34') 

评估为TRUE。

参考:FIND_IN_SET http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

如果我们想避免使用MySQL特定的FIND_IN_SET函数,我们可以使用LIKE比较。但要使其工作,我们需要在子列表的开头和结尾添加一个逗号字符,然后搜索逗号分隔的值,例如:列表中的 ',8,' 。例如

 CONCAT(',',subcat,',') LIKE '%,8,%'