mySQL:包含 | 的选择查询出现问题符号(LIKE 和/或 REGEXP)

标签 mysql regex select sql-like

我当前的查询如下所示:

$query = "SELECT * FROM t WHERE (data LIKE '$findme') OR (data LIKE '%$findme|%') OR (data LIKE '%|$findme%')";

此列中的数据包含由管道符号(“|”)分隔的项目,我需要查询来查找包含此字段中出现的任何项目的所有记录。此外,如果该列中只有一项,则不会有“|”符号存在。

示例:

$findme = "12";

查询应匹配:

13|23|12
12
12|23
3|12|42

查询不应匹配:

123|32
34|123

我不确定使用 REGEXP 是否会使这变得更容易,但如果是这样,欢迎任何解决方案。谢谢!

SQLFiddle 示例: http://sqlfiddle.com/#!3/32afd/5

最佳答案

使用 REPLACE() 的组合和 FIND_IN_SET() ,您可以将 | 替换为逗号,并在管道分隔集中找到您的值 $findme:

SELECT * 
FROM table
/* Replace | with , and search in the set */
WHERE FIND_IN_SET('$find_me', REPLACE(data, '|', ',')) > 0

请注意,只有当 data 中的分隔值不包含逗号时,这才有效。

从长远来看,适当的解决方案是将分隔列 data 分离到另一个正确规范化的一对多表中。

关于mySQL:包含 | 的选择查询出现问题符号(LIKE 和/或 REGEXP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021243/

相关文章:

python - 如何检查与多个模式匹配的字符串?

php - 带有选择列表的 Symfony 2 表单

mysql - 将 csv 导入 MySQL

javascript - SQL 查询插入值并显示,无需重新加载页面

java - 将图像上传到服务器并将带有文本值的路径存储到 MySQL 中

MySQL 连接两行

MYSQL 解释给出 "Impossible WHERE"和 SELECT Count(x) 查询

mysql - 如何为每个内部连接表仅获取一个结果

Java 正则表达式 - 带一个反斜杠的无效转义序列,使用两个删除这些标记

Javascript 正则表达式在每 n 个单词后添加 <br> - 无 CSS