SQL2005中的问题求解:我外部有一个类型为nchar(2)的字符串会不规律存取到某个列值当中,并且字符串中间以逗号进行区分。
比如象这样:“A1,A2,A3,A4..An”。
我事后需要把这组字符串按逗号截取出来,并分别存储到不同的变量中。比如:@a=A1;@b=A2,@c=An..
注:这个列表中的字符串的长度是不规则的。请帮小弟写一个按规律循环截取字符串并作变量赋值的示例。非常感谢!
比如象这样:“A1,A2,A3,A4..An”。
我事后需要把这组字符串按逗号截取出来,并分别存储到不同的变量中。比如:@a=A1;@b=A2,@c=An..
注:这个列表中的字符串的长度是不规则的。请帮小弟写一个按规律循环截取字符串并作变量赋值的示例。非常感谢!
解决方案 »
- 各行字符串叠加
- 关于附加数据库的问题,附加原来的数据库,在路径前面有个红叉,数据库附加不了,原因?
- Restore实现还原最新备份集的方法
- 如何让52.174834显示为52.17
- 自动生成考勤明细表
- insert into table1 select a,b,c出的错误
- 请问在vfp中如何使用状态栏?????????请看!
- 怎么对另一个数据库中的表进行查询操作,使用SQL语句,急待中!!!!
- 在SQL Server中,怎么取得'YYYY-MM-DD'形式的时间???
- ServerVersion = “conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常
- 数据库创建的问题!
- sql server 2008 怎么导入ldf mdf文件
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator , @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr , @i - 1))
set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i)
set @i = charindex(@seprator , @inputstr)
end
if @inputstr <> '\'
insert @temp values(@inputstr)
return
endDECLARE @str VARCHAR(100)
set @str='asf,asdf,fdsaf,asdfa,sdf,asd'
SELECT a FROM [dbo].[fn_split](@str,',')a
-------------------
asf
asdf
fdsaf
asdfa
sdf
asd(6 row(s) affected)
功能:实现split功能的函数
*/create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as begin
declare @i intset @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
endif @inputstr <> '\'
insert @temp values(@inputstr)return
end
go--调用declare @s varchar(1000)set @s='1,2,3,4,5,6,7,8,55'select * from dbo.fn_split(@s,',')drop function dbo.fn_split /*
a
----------------------
1
2
3
4
5
6
7
8
55(所影响的行数为 9 行)
*/
所以在引用时,须用游标 给变量赋值。declare @s='A1,A2,A3,A5'
declare @a nvarchar(2)declare @cur cursor for select * from dbo.fn_split(@s,',')--defineopen @cur fetch next from @cur into @a while @cursor_status=0 --开始循环
begin--就里就可以做你的处理
fetch next from @cur into @a
end
CLOSE @cur --关闭游标
DEALLOCATE @cur--释放游标