sql语句查询逗号分隔的字段,mysql 逗号分隔 查询

  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);

  以上的两个都可以用。

sql语句查询逗号分隔的字段,mysql 逗号分隔 查询