日期:2014-05-16  浏览次数:20642 次

取字符串的SQL怎么写?
表结构和内容如下:

id   科目名称
1    语文/数学/英语
2    语文
3    数学/语文
.....很多记录

要得到这样的结果

id   科目名称
1    语文
1    数学
1    英语
2    语文
3    数学
3    语文

多个科目名称都是用 / 分隔的。

这个SQL 怎么取啊???


------解决方案--------------------



--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([ID] int,科目名称 varchar(50))
insert [a]
select 1,'语文/数学/英语' union all
select 2,'语文' union all
select 3,'数学/语文'

select
    id, 
    
    SUBSTRING([科目名称],number,CHARINDEX('/',[科目名称]+'/',number)-number) as [科目名称]
from
    a a,master..spt_values 
where
    number >=1 and number<=len([科目名称])  
    and [type]='p' 
    and substring('/'+[科目名称],number,1)='/'


/*
id          科目名称
----------- --------------------------------------------------
1           语文
1           数学
1           英语
2           语文
3           数学
3           语文

(6 行受影响)
*/


------解决方案--------------------
试试这个:

--drop table tb

create table tb(id int,  科目名称 varchar(30))

insert into tb
select 1    ,'语文/数学/英语' union all
select 2    ,'语文' union all
select 3    ,'数学/语文'
go


select id,
       SUBSTRING(t.科目名称, number ,CHARINDEX('/',t.科目名称+'/',number)-number) 科目名称
from tb t,master..spt_values s
where s.number >=1
and s.type = 'P'
and SUBSTRING('/'+t.科目名称,s.number,1) = '/'
/*
id 科目名称
1 语文
1 数学
1 英语
2 语文
3 数学
3 语文
*/

------解决方案--------------------
关于字符串拆分整理
------解决方案--------------------
看看我这篇文章,希望对你有启发
http://blog.csdn.net/dotnetstudio/article/details/19909921
------解决方案--------------------
引用:
是2005版本


试试这个:
--drop table tb

create table tb(id int,  科目名称 varchar(30),得分 varchar(20))

insert into tb
select 1    ,'语文/数学/英语','80/85/90' union all
select 2    ,'语文',' 70' union all
select 3    ,'数学/语文','99/78' union all
select 4 &nb