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

时间:2014-06-26 15:49:10

标签: mysql sql

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

有些事情是这样的:

SELECT * FROM Table_Name WHERE 45 is part of value in Column_Name   

是否可以或我必须使用“喜欢”?

2 个答案:

答案 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