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

时间:2016-01-19 21:19:44

标签: 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的行(因为它们与我的搜索字符串共享数字)。

我试图用一个查询来做这个,没有循环。

谢谢!

3 个答案:

答案 0 :(得分:1)

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

但是,如果您无法更改架构,则可以使用regular expression

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

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

请注意,如果表格很大,这种类型的搜索会非常慢,因为索引它是不可行的。

答案 1 :(得分:0)

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

    SELECT numbers    
    FROM table    
    WHERE arrayIntersect(@argument, numbers)
    
  4. 两个带循环的函数定义和一个没有任何循环的单个查询

答案 2 :(得分:-1)

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

或者您也可以使用像this

这样的REGEX
SELECT * FROM events WHERE id REGEXP '5587$'