mysql检查数字是否在逗号分隔列表中

时间:2010-04-20 09:43:10

标签: mysql list

我有一张这样的表:

UID(int) NUMBERS(blob)
----------------------
1        1,13,15,20
2        3,10,15,20
3        3,15

我想测试3和15是否在名为NUMBERS的blob中。并且可以看到LIKE %%无法使用

只选择ID为2且有三个scoulb的行...

7 个答案:

答案 0 :(得分:41)

这个也有效:

SELECT * FROM table WHERE 3 IN (NUMBERS) AND 15 IN (NUMBERS)

使用IN会查看逗号分隔的字符串,例如。这两个

WHERE banana IN ('apple', 'banana', 'coconut')
WHERE 3 IN (2,3,6,8,90)

Info found on this page:

答案 1 :(得分:34)

不是最漂亮的解决方案,但它确实有效:

select
   UID
from
   YOUR_TABLE
where
   find_in_set('3', cast(NUMBERS as char)) > 0
   and
   find_in_set('15', cast(NUMBERS as char)) > 0

请注意,它是字符串比较,因此您可能还需要将输入参数转换为char。

答案 2 :(得分:14)

你可以尝试如下:

 SELECT * FROM table_name WHERE FIND_IN_SET('3', NUMBERS) AND  FIND_IN_SET('15', NUMBERS)

答案 3 :(得分:7)

同时检查这是否对任何人有帮助

一个扩展函数,用于消除MySQL中本机FIND_IN_SET()的限制,这个新的扩展版本FIND_IN_SET_X()提供了将一个列表与另一个列表进行比较的功能。

mysql> SELECT FIND_IN_SET_X('x,c','a,b,c,d'); -> 3 

Checkout this link for more details.

答案 4 :(得分:3)

为您完成的功能

if ((index = str.indexOf('.'))>-1) { .. do something with index.. }

答案 5 :(得分:0)

find_in_set_x

在mysql中创建一个新函数并粘贴以下内容(顺便说一句,不是我的工作)

BEGIN
DECLARE limitCount INT DEFAULT 0;
DECLARE counter INT DEFAULT 0;
DECLARE res INT DEFAULT 0;
DECLARE temp TEXT;
SET limitCount = 1 + LENGTH(inputList) - LENGTH(REPLACE(inputList, ',',''));
simple_loop:LOOP
SET counter = counter + 1;
SET temp = SUBSTRING_INDEX(SUBSTRING_INDEX(inputList,',',counter),',',-1);
SET res = FIND_IN_SET(temp,targetList);
IF res > 0 THEN LEAVE simple_loop; END IF;
IF counter = limitCount THEN LEAVE simple_loop; END IF;
END LOOP simple_loop;
RETURN res;
END

答案 6 :(得分:0)

尝试此查询:

SELECT UID FROM table WHERE NUMBERS REGEXP "[[:<:]](3|10)[[:>:]]"