Mysql中查找逗号分隔的字符串数据_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2355 | 回复: 0   主题: Mysql中查找逗号分隔的字符串数据        下一篇 
无止境
注册用户
等级:新兵
经验:64
发帖:74
精华:0
注册:2011-11-14
状态:离线
发送短消息息给无止境 加好友    发送短消息息给无止境 发消息
发表于: IP:您无权察看 2014-11-12 9:54:17 | [全部帖] [楼主帖] 楼主

今天碰到的问题,已经解决。

表中的数据是

+------+------------+
| id   | related2   | | 1098 | 4979       |
| 1089 | 4980       |
| 1118 | 4979       |
| 1117 | 4980       |
| 4986 | 4980,4979  |
| 4987 | 4979       |
| 4988 | 4980,4979  |
| 4989 | 4979       |
| 4990 | 4979       |
| 4991 | 4980, 4979 |
+------+------------+


要查出所有包含4979的数据,其实挺简单的。

主要用了两个函数:FIND_IN_SET 和REPLACE

FIND_IN_SET(str,strlist)


如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常。  

 mysql>   SELECT   FIND_IN_SET( 'b ', 'a,b,c,d ');
->   2


这个函数的问题是逗号中有空格无法识别,所以只能先用REPLACE把空格替换掉。

REPLACE(str,from_str,to_str)


返回字符串str,其字符串from_str的所有出现由字符串to_str代替。  

 mysql>   select   REPLACE( 'www.mysql.com ',   'w ',   'Ww ');
->   'WwWwWw.mysql.com '


所以,最后的where 应该是这样写的,

select id, related2
from table where and FIND_IN_SET( '4979', REPLACE( related2, ' ', ''));


结果

+------+------------+
| id   | related2   | | 1098 | 4979       |
| 1118 | 4979       |
| 4986 | 4980,4979  |
| 4987 | 4979       |
| 4988 | 4980,4979  |
| 4989 | 4979       |
| 4990 | 4979       |
| 4991 | 4980, 4979 |
+------+------------+


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论