【小小问题集锦4--拆分一个字符串的方法】
2010-01-27 22:49
176 查看
/*
****拆分一个字符串*********
问题描述:
@str='fds,bbbf,eee,ddd,fff,hhhfg,dddde' 拆分成
col
------------------------
fds
bbbf
eee
ddd
fff
hhhfg
dddde
*/
---方法:动态
declare @str varchar(500),@aaa varchar(8000)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
set @aaa='select * from (select '''+REPLACE(@str,',',''' as str union all select ''')+''') a '
exec(@aaa)
go
--方法:循环
create table #t(
id varchar(10))
declare @str varchar(300)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
declare @i int
declare @len int
set @i = 1
while @i < len(@str+',')
begin
insert #t select substring(@str+',',@i,charindex(',',@str+',',@i)-@i)
set @i = charindex(',',@str+',',@i)+1
end
select * from #t
drop table #t
go
--or
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
--方法:使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO
declare @str varchar(500),@aaa varchar(8000)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
select * from dbo.f_splitSTR(@str,',')
****拆分一个字符串*********
问题描述:
@str='fds,bbbf,eee,ddd,fff,hhhfg,dddde' 拆分成
col
------------------------
fds
bbbf
eee
ddd
fff
hhhfg
dddde
*/
---方法:动态
declare @str varchar(500),@aaa varchar(8000)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
set @aaa='select * from (select '''+REPLACE(@str,',',''' as str union all select ''')+''') a '
exec(@aaa)
go
--方法:循环
create table #t(
id varchar(10))
declare @str varchar(300)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
declare @i int
declare @len int
set @i = 1
while @i < len(@str+',')
begin
insert #t select substring(@str+',',@i,charindex(',',@str+',',@i)-@i)
set @i = charindex(',',@str+',',@i)+1
end
select * from #t
drop table #t
go
--or
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
--方法:使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO
declare @str varchar(500),@aaa varchar(8000)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
select * from dbo.f_splitSTR(@str,',')
相关文章推荐
- 小小问题集锦4--拆分一个字符串的方法
- 地址栏传值的方法,写在一个字符串,然后在进行拆分
- 【字符串操作之】将一个字符串拆分成数组→→split方法
- C#串口编程问题:一个测试数据怎么拆分成2个字符串,做了2次发送?
- Android自带播放器字符串显示乱码问题的一个解决方法
- 字符串生成Hash值后转换成Guid的若干方法和一个重要问题
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 【小小问题集锦6之---查询条件非常复杂时解决效率不高的一个办法】
- 一个风控计算负载过高到mysql主从拆分暴露的各种设计复杂性问题以及解决方法总结
- 编写一个能根据指定字符对字符串进行拆分的方法
- 小小问题集锦6之---查询条件非常复杂时解决效率不高的一个办法
- 机房重构所遇问题"未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件"的解决的方法集锦
- 一个关于sql语句的问题解决,包括:字符串拆分,游标
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- JavaScript中prototype(原型)给字符串对象添加一个toCharArray的方法,reverse(翻转)的 方法
- Java面试集锦:面试官只问一个问题,30几人集体懵圈
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 一个多数程序员都会犯的错:Java方法传参的问题
- 老外对T-sql的研究:一个问题多种方法
- 三种实现交换的方法,其中一个诡异的swap函数——C/C++语言(问题求助)