mysql 字符切割

pressman 2008-04-28 04:42:24
一个字符串‘3;6;7;15;35;99;’
如何查询得到
xx
--
3
6
7
15
35
99
...全文
238 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
pressman 2008-05-06
  • 打赏
  • 举报
回复
说来惭愧,如果把问题描叙得更清楚,应该大家早就可以帮到我了,
其实还有个表字段包含所有ID,
问题重新描叙:
一个表A,有字段ID,包含所有数字。
一个表B,有字符串IDGROUPS‘3;6;7;15;35;99;’
如何查询得到
xx
--
3
6
7
15
35
99

#测试代码
DROP TABLE IF EXISTS `testa`;
CREATE TABLE `testa` (
`id` int(11) NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=gbk;


INSERT INTO `testa` (`id`) VALUES (1);
INSERT INTO `testa` (`id`) VALUES (2);
INSERT INTO `testa` (`id`) VALUES (3);
INSERT INTO `testa` (`id`) VALUES (4);
INSERT INTO `testa` (`id`) VALUES (5);
INSERT INTO `testa` (`id`) VALUES (6);
INSERT INTO `testa` (`id`) VALUES (7);
INSERT INTO `testa` (`id`) VALUES (8);
INSERT INTO `testa` (`id`) VALUES (9);
INSERT INTO `testa` (`id`) VALUES (10);
INSERT INTO `testa` (`id`) VALUES (11);


DROP TABLE IF EXISTS `testb`;
CREATE TABLE `testb` (
`id` int(11) default NULL,
`IdGroups` varchar(100) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;


INSERT INTO `testb` (`id`,`IdGroups`) VALUES (1,'5;4;7;11;9;');
#执行SQL
select a.id as xx FROM testa a where (select FIND_IN_SET(a.id,REPLACE(b.idGroups,';',',')) from testb b where b.id='1');

#结果
xx
--
4
5
7
9
11

结帖/
liuyann 2008-04-30
  • 打赏
  • 举报
回复

问题我自己解决了,我晚上把代码贴出来,现在有点忙!·


==== ====
wwwwb 2008-04-29
  • 打赏
  • 举报
回复
呵呵,自己解决更好
pressman 2008-04-29
  • 打赏
  • 举报
回复
问题我自己解决了,我晚上把代码贴出来,现在有点忙!·
liuyann 2008-04-29
  • 打赏
  • 举报
回复

另外,看了你的表结构,一般来说,设计用户权限表分成三张表,很少这样设计的

user (uid, pswd ....)
role (rid, ...)
permission ( rid, perid,...
userRole ( uid, rid)
==== ====
liuyann 2008-04-29
  • 打赏
  • 举报
回复

[Quote]人呢?[/Quote]

今天要开会,如果没人帮你写的话,明天帮你写一下
==== ====
wwwwb 2008-04-29
  • 打赏
  • 举报
回复
一般用存储过程来解决
pressman 2008-04-29
  • 打赏
  • 举报
回复
人呢?
WWWWA 2008-04-29
  • 打赏
  • 举报
回复
mysql 没有split_part函数吧?
fanhuan1 2008-04-29
  • 打赏
  • 举报
回复
split_part(‘3;6;7;15;35;99;', ';', 1) = 3;
split_part(‘3;6;7;15;35;99;', ';', 2) = 6;
...
pressman 2008-04-28
  • 打赏
  • 举报
回复
作一行算
懒得去死 2008-04-28
  • 打赏
  • 举报
回复


set @str = '3;6;7;15;35;99;';
select substring_index(@str,';',1);
select substring(substring_index(@str,';',2),instr(substring_index(@str,';',2),';')+1);

...
liuyann 2008-04-28
  • 打赏
  • 举报
回复

test1, test2表中各只有一行记录?
==== ====
pressman 2008-04-28
  • 打赏
  • 举报
回复
可以用store procedure ,5.0的支持的,
很感谢
liuyann 2008-04-28
  • 打赏
  • 举报
回复

1。可以用store procedure 吗?
如果可以,我可以帮你写个store procedure, 不过你的mySQL version >5
2。是否是只能用SQL语句实现?
比较复杂,但亦可实现

说明你的要求,省得我做两种方案

==== ====
liuyann 2008-04-28
  • 打赏
  • 举报
回复

有什么条件限制吗?

1。可以用store procedure 吗?
2。是否是只能用SQL语句实现?

==== ====
pressman 2008-04-28
  • 打赏
  • 举报
回复
来的帮顶一下,要沉了。分不够我明天再加。
pressman 2008-04-28
  • 打赏
  • 举报
回复
想用find_in_set函数来找,所以想先把它转为一列的形式来用,
请大家帮忙呀!
pressman 2008-04-28
  • 打赏
  • 举报
回复
其实我是想从2个字符串中找相同的记录,
#建表测试代码
create table test1
(`strA` varchar(20) NOT NULL);
create table test2
(`strB` varchar(20) NOT NULL);
insert into test1 values('2;5;7;13;55;108;266;');
insert into test2 values('2;7;13;108;');
#表中的strA,strB长度是不限的,元素间以;分隔,strB中的元素一定在strA中有。
目标
XX FLAG
--------
2 1
5 0
7 1
13 1
55 0
108 1
266 0
pressman 2008-04-28
  • 打赏
  • 举报
回复
谢谢楼上二位,我先试下
希望有更为简单的办法,明天结帖
加载更多回复(2)

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧