sql语句查询逗号分隔的字段,mysql 逗号分隔 查询
创建表测试(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50)NOT NULL);
然后插入带有逗号分隔的测试数据
插入到测试(pname,pnum)值(产品1,1,2,4);
插入到测试(pname,pnum)值(产品2,2,4,7);
插入到测试(pname,pnum)值(产品3,3,4);
插入到测试(pname,pnum)值(产品4,1,7,8,9);
插入到测试(pname,pnum)值(产品5,33,4);
查找商品数量字段中包含3或者9的记录
MySQL SELECT * FROM test WHERE find _ in _ set( 3 ,pnum)或find_in_set(9 ,pnum);
- - -
id pname pnum
- - -
3 产品3 3,4
4 产品4 1,7,8,9
- - -
一组2行(0.03秒)
使用正则
MySQL SELECT * FROM test WHERE pnum REGEXP (3 9);
- - -
id pname pnum
- - -
3 产品3 3,4
4 产品4 1,7,8,9
5 产品5 33,4
- - -
一组3行(0.02秒)
这样会产生多条记录,比如33也被查找出来了。
换一种方式
MySQL select*fromtestwhereconcat(,,pnum,,)regexp[^0-9][39][^0-9];
- - -
id pname pnum
- - -
3 产品3 3,4
4 产品4 1,7,8,9
- - -
集合中的2行(0.01秒)
3、select * from OA _ student _ archives where CONCAT(,,pe_projects,,)like %,11,% ;
这种方式也可以。
注意:
标红的MySQL select*fromtestwhereconcat(,,pnum,,)regexp[^0-9][39][^0-9];
这种,当时小于10的数据搜索是可以的,但是如果是大于10的,则不能用,原因我还不太清楚,有大神可以解释下吗?
总结如下:
1、select * from OA _ student _ archives where CONCAT(,,pe_projects,,)like %,11,% ;
2、select * from OA _ student _ archives where find _ in _ set( 12 ,PE _ projects);
以上的两个都可以用。