
高分求助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
万分谢谢!
求救! 展开
a,b,c,d
此字段也可能为空,或只有a或a,b
总之,是以","分隔各值。
如何select取出该字段的各值并赋给字段1,字段2,字段3,字段n。
select
'a' 字段1,
'b' 字段2 ,
'c' 字段3
..
from t
万分谢谢!
求救! 展开
6个回答
展开全部
这个要用自定义函数了
比如象你的就是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
比如象你的就是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
展开全部
可以使用as关键字
select
'a' as 字段1,
'b' as 字段2 ,
'c' as 字段3
..
from t
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以“,”号分隔的话,这个你可能需要用函数或存储过程来实现。用普通的SQL语句是不好实现的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是用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 正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询