高分求助SQL语句写法(t表中一字段中内容如:a,b,c,d。如何分别取出各值)

t表中一字段中内容如:a,b,c,d此字段也可能为空,或只有a或a,b总之,是以","分隔各值。如何select取出该字段的各值并赋给字段1,字段2,字段3,字段n。se... t表中一字段中内容如:
a,b,c,d
此字段也可能为空,或只有a或a,b
总之,是以","分隔各值。

如何select取出该字段的各值并赋给字段1,字段2,字段3,字段n。
select
'a' 字段1,
'b' 字段2 ,
'c' 字段3
..

from t

万分谢谢!
求救!
展开
 我来答
syht2000
高粉答主

2012-01-06 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.5亿
展开全部
这个要用自定义函数了
比如象你的就是select split(字段名,',',0) as 字段1,split(字段名,',',1) as 字段2 ...

CREATE FUNCTION [dbo].[split]
(@str nvarchar(4000),@code varchar(10),@no int )
RETURNS varchar(200)
AS
BEGIN

declare @intLen int
declare @count int
declare @indexb int
declare @indexe int
set @intLen=len(@code)
set @count=0
set @indexb=1

if @no=0
if charindex(@code,@str,@indexb)<>0
return left(@str,charindex(@code,@str,@indexb)-1)
else
return @str

while charindex(@code,@str,@indexb)<>0
begin
set @count=@count+1
if @count=@no
break
set @indexb=@intLen+charindex(@code,@str,@indexb)
end

if @count=@no
begin

set @indexe=@intLen+charindex(@code,@str,@indexb)
if charindex(@code,@str,@indexe)<>0
return substring(@str,charindex(@code,@str,@indexb)+len(@code),charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code))
else
return right(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1)

end

return ''

END
百度网友5803c9a
2012-01-06 · TA获得超过2162个赞
知道小有建树答主
回答量:891
采纳率:0%
帮助的人:1260万
展开全部
可以使用as关键字
select
'a' as 字段1,
'b' as 字段2 ,
'c' as 字段3
..

from t
更多追问追答
追问
select 
(这里的a是怎么取出来的,请问?) as 字段1,
'b' as 字段2 ,
'c' as 字段3
追答
错了,不能用引号
select
a as 字段1,
b as 字段2 ,
c as 字段3
..

from t
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
try4148
2012-01-06 · TA获得超过334个赞
知道小有建树答主
回答量:632
采纳率:100%
帮助的人:404万
展开全部
sql 2005 可以试试这个,一句sql搞定
DECLARE @str VARCHAR(1000)
DECLARE @x xml
SET @str='a,b,c,d'
SELECT id
FROM (SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@str , ',' , '</v><v>')+ '</v>')
) A
OUTER APPLY ( SELECT id = N.v.value('.' , 'varchar(100)')
FROM A.[value].nodes('/v') N (v)
) B
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友242b9b74c
2012-01-06 · TA获得超过1208个赞
知道小有建树答主
回答量:762
采纳率:0%
帮助的人:461万
展开全部
以“,”号分隔的话,这个你可能需要用函数或存储过程来实现。用普通的SQL语句是不好实现的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
QinQinMeCC
2012-01-06 · TA获得超过2017个赞
知道小有建树答主
回答量:808
采纳率:100%
帮助的人:577万
展开全部
就是用SQL 没用到JDBC 或 hibernate 吗?
追问
就sql2005
追答
create function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql'\'
insert @temp values(@SourceSql)
return
end

----调用以上函数
----存入 '123#231#' 最好存入时候最后一个#不要存入
----select substring('123#123#',0,len('123#123#'))
----select * from f_split('123#231','#')
declare @var varchar(20)
select @var= LB from tb_JIUFEN where JFID =XXLYID ;
----select * from f_split(@var,'#')
----为了查询此类别
select * from LB_TABLE
where LB in (
select * from f_split(@var,'#')
)

给你这例子 你可以用上面的那个函数把你查询的那个字段 f_split(@var,',')
以调号 隔开 在一一存入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-06
展开全部
syht2000 正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式