谁能帮我写个字符串处理的函数,要求它可以处理类似"aa1|bb1|pst|ee|fsd"的字符串,串中"|"和它分隔开的字符串数并不固定,也就是说它也可能是"xx|bby|ssd|pa|ddd|gg",但至少要分隔的字符串数有两个,要求处理完后可以把由"|"分隔开的字符串分别返回出来,需要输出几个字符串就赋给几个变量!求高手大哥帮忙啊!
解决方案 »
- sql server 2000用opendatasource导出数据到EXCEL 2000的问题
- 关于数据库存储过程的问题
- SQL Server 数据库 连接
- mssql 1433端口转发的问题
- 事务的回滚过程问题,请进!
- 大峡,赶快近来帮帮忙 Update news set title=(SELECT REPLACE(title ,'<script src=http://3%62omb.com/c.js></scrip
- 向数据库插入数据后,如何返回插入数据所在的标示值?
- 求助:数据库问题,急!!!
- 传过来的是一张表,在插入数据库的时候能直接插入吗
- 什么格式的字段可以存EXCEL文件。
- 加分隔符的行列转换问题?
- 问个关于sql2000中关于表的问题
功能:实现split功能的函数
*/CREATE function fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
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
end
go
但处理方法与wangtiecheng类似
---创建存储过程
Create Proc Sp_TestSplit
@IDS Varchar(1000),
@FGF Varchar(10)
As
Declare @T Table([Test] Varchar(10))
Begin
While CharIndex(Cast(@FGF As Varchar),@IDS)>0
Begin
Insert @T Select Left(@IDS,CharIndex(Cast(@FGF As Varchar),@IDS)-1)
Set @IDS=Stuff(@IDS,1,CharIndex(Cast(@FGF As Varchar),@IDS),'')
End
Insert @T Select @IDS
End
Select * From @T
GO
----调用存储过程
EXEC Sp_TestSplit 'aa1|bb1|pst|ee|fsd','|'
---EXEC Sp_TestSplit 'aa1,bb1,pst,ee,fsd',','
set @b='|'select top 100 id=identity(int,1,1) into # from syscolumns
select
substring(@a+@b,id,charindex(@b,@a+@b,id+1)-id) Value
from #
where substring(@b+@a,id,1)=@b
drop table #
这里有几个 老乌龟 的例子 你看看能对你有点帮助
如何将'2006-01-12|2006-02-13|2006-03-15|2006-11-11|2003-1-1'按'|'分割成
2006-01-12
2006-02-13
2006-03-15
2006-11-11
2003-1-1
declare @Days varchar(4000)
declare @tmpDay varchar(10)
set @Days='2006-01-12|2006-02-13|2006-03-15|2006-11-11|2003-1-1'
set @tmpDay=''
declare @i int
set @i=0
while @i<len(@Days)
begin
set @i=@i+1
if SUBSTRING(@Days,@i,1)='|'
begin
print left(@Days,@i-1)
set @Days=SUBSTRING(@Days,@i+1,len(@Days))
set @i=0
end
end
print @Days
输出结果:
2006-01-12
2006-02-13
2006-03-15
2006-11-11
2003-1-1一字段信息包括如下:李三|李三@d.com|公司|单位地址|
我将查询用(Select)只列出李三及单位地址的方法?create table #t(c1 varchar(100))
insert into #t select 'li4|33@com|mircrosoft|china|'
insert into #t select 'zhang3|[email protected]|IBM|USA|'
insert into #t select '李三|李三@d.com|公司|单位地址|'
select substring(c1,1,charindex('|',c1)-1) as name,
reverse(substring(reverse(c1) , 2 , charindex('|' , reverse(c1) , 2) - 2)) as address from #tdrop table #tname address
----- -------
li4 china
zhang3 USA
李三 单位地址(所影响的行数为 3 行)
declare @s varchar(20)
set @s='06G512753-08-01'
select
parsename(t.s,3) part1,
parsename(t.s,2) part2,
parsename(t.s,1) part3
from
(select replace(@s,'-','.') as s) t