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 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 有什么不同。它仍然需要解析表中的每个字符串。

关于mysql - SQL 选择在列中找到匹配值的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435003/

相关文章:

mysql - 从同一表中选择的 SQL 子查询

MySQL 查询从 1000 万行表中获取每个条目的最新记录

MySQL 错误代码 1166。列名不正确

mysql - 使用条件计数过滤 GROUP BY 中的查询结果

php - 查询此错误是什么?

mysql - 如何通过 Inner Join 来使用 Union

mysql - Laravel 5.4 中没有默认值时出现错误

php - SQL 延迟加载 - 选择一个范围但丢弃之前选择的条目

MySQL 查询没有得到准确的输出

sql - Postgres 按周划分