是否可以从mysql db中检索匹配部分字符串而不使用“LIKE”的数据? 例如,我有一个值为“22,56,79,45,69”的列 我想只检索列值中“45”的行而不使用“LIKE”条件?
有些事情是这样的:
SELECT * FROM Table_Name WHERE 45 is part of value in Column_Name
是否可以或我必须使用“喜欢”?
答案 0 :(得分:2)
如果无法更改架构,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
。这会快得多。
要回答实际的问题,即当前架构是否可以使用LIKE
,您可以查看Regexp operator。但是,我并不认为这与使用LIKE
有任何不同。它仍然需要解析表中的每个字符串。
答案 1 :(得分:0)
如果您的逗号分隔列表中的项目少于100个,则可以使用CTE将其“展开”到表格中...
http://www.wisesoft.co.uk/scripts/t-sql_cte_split_string_function.aspx