Mysql SQL选择在列中找到匹配值的位置

Mysql SQL选择在列中找到匹配值的位置,mysql,sql,Mysql,Sql,是否可以不使用“LIKE”从mysql数据库检索与字符串部分匹配的数据? 例如,我有一个值为“22,56,79,45,69”的列 我只想检索数字“45”在列值内的行,而不使用“LIKE”条件 像这样的事情: SELECT * FROM Table_Name WHERE 45 is part of value in Column_Name 有没有可能或者我必须使用“LIKE”?如果您不能更改模式,那么使用LIKE操作符将是最简单的方法 SELECT * FROM Table_Name WH

是否可以不使用“LIKE”从mysql数据库检索与字符串部分匹配的数据? 例如,我有一个值为“22,56,79,45,69”的列 我只想检索数字“45”在列值内的行,而不使用“LIKE”条件

像这样的事情:

SELECT * FROM Table_Name WHERE 45 is part of value in Column_Name   
有没有可能或者我必须使用“LIKE”?

如果您不能更改模式,那么使用
LIKE
操作符将是最简单的方法

SELECT * FROM Table_Name WHERE
Column_Name LIKE '45,%'      -- Starts with 45
OR Column_Name LIKE '%,45,%' -- 45 in the middle somewhere
OR Column_Name LIKE '%,45'   -- Ends with 45
OR Column_Name = '45';       -- 45 is the only item in the list
您也可以将其简化为:

SELECT * FROM Table_Name WHERE concat(',',Column_Name,',') LIKE '%,45,%';
但是,如果您的表很大,而且性能令人担忧,我建议您不要使用这种方法。MySql将无法为此利用索引。相反,我建议您规范化数据。将每个值放在不同表中的单独一行中,然后在该表中加入
JOIN
。这将要快得多


要回答您的实际问题,即在当前模式下是否可以这样做,而不必像那样使用
,您可以查看。然而,我并不认为这与像
一样使用
有什么不同。它仍然需要解析表中的每个字符串。

如果逗号分隔列表中的项目少于100项,则可以使用CTE将其“取消滚动”到表中


为什么不能像
那样使用
?因为如果我检索所有数据,比如30,我会得到30-300-3000等的结果。这不适用于mySQL。(是的,这个问题的标签很差)呃。。。嗯,也许一些真正的软件开发人员会欣赏这种技术:)太棒了!这就是我所寻找的工作,非常感谢。