MYSQL - 查找行,其中搜索字符串的一部分与列中的部分值匹配



我在任何地方都找不到这个,这是我的问题:

我有一个

像'1 2 3 4 5'这样的字符串,然后我有一个mysql表,它有一列,我们称之为数字,看起来像这样:

numbers
1 2 6 8 9 14   
3              
1 5 3 6 9      
7 8 9 23 44    
10          

我正在尝试找到最简单的方法(希望在单个查询中)来查找行,其中我的搜索字符串中的任何数字(1 或 2 或 3 或 4 或 5)都包含在数字列中。在给定的示例中,我正在寻找具有 1,2 和 3 的行(因为它们与我的搜索字符串共享数字)。

我正在尝试使用单个查询并且没有循环来执行此操作。

谢谢!

最好的解决方案是删除包含值列表的列,并使用每个值位于其自己的行中的架构。然后,您可以使用WHERE number IN (1, 2, 3, 4, 5)并将其与包含其余数据的表联接。

但是,如果无法更改架构,则可以使用正则表达式。

SELECT *
FROM yourTable
WHERE numbers REGEXP '[[:<:]](1|2|3|4|5)[[:<:]]'

[[:<:]][[:<:]]与单词的开头和结尾相匹配。

请注意,如果表很大,这种类型的搜索将非常慢,因为无法为其编制索引。

  1. 这是一个起点(拆分字符串函数):http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/:= 拆分字符串(字符串,分隔符,位置)
  2. 创建一个函数,以便它将字符串转换为数组:= stringSplitted(string,delimiter)
  3. 创建一个函数,以便它比较两个数组:=arrayIntersect(array1, array2)

    SELECT numbers    
    FROM table    
    WHERE arrayIntersect(@argument, numbers)
    

两个带循环的函数定义和一个没有任何循环的单个查询

SELECT * FROM MyTable WHERE (numbers LIKE '%1%' OR numbers LIKE '%2%')

或者你也可以使用像这样的东西 REGEX

SELECT * FROM events WHERE id REGEXP '5587$'

最新更新