字符串拆分问题
set @xmstr ='<年借方发生额:101> + <年借方发生额:10201> + <年借方发生额:10202> '
在存储过程中
怎么拆分成
101
10201
10202
呢?
问题点数:100、回复次数:4Top
1 楼friendliu(无为)回复于 2004-08-03 00:29:18 得分 30
用SUBSTRING函数
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。
语法
SUBSTRING ( expression , start , length )
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
说明 由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。
Top
2 楼mnm35(探索者)回复于 2004-08-03 00:50:31 得分 0
晕,不一定多少个的Top
3 楼Lwg0901(伤心人)回复于 2004-08-03 08:12:51 得分 0
set @a1 = charindex(@xmstr, ':')
set @a2 = charindex(@xmstr, '>')
set @t1 = SUBSTRING(@xmstr, @a1, @a2-a1)
set @xmstr = SUBSTRING(@xmstr, @a2, len(@xmstr)-a2)
Top
4 楼CSDMN(冒牌经理 V0.4)回复于 2004-08-03 08:31:32 得分 70
写了个拆分函数,适合这个应用
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_split]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_split_2]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [序数表]
GO
--为了效率,所以要一个辅助表配合
select top 8000 id=identity(int,1,1) into 序数表
from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go
/*--字符串分函数
分拆指定的两个分隔符之间的字符串,返回结果表
--冒牌 2004-8--*/
/*--调用示例
--调用
select * from f_split_2('a:1,a:2,a:100,a:200',':',',')
--*/
create function f_split_2(
@str varchar(8000), --要分拆的字符串
@splitchar1 varchar(10), --分隔符1
@splitchar2 varchar(10) --分隔符2
)returns table
as
return(
select re=substring(@str,a.id+1,b.id-a.id-1)
from 序数表 a ,序数表 b
where a.id<=len(@str)+1
and b.id<=len(@str)+1
and charindex(@splitchar1,@str,a.id)-a.id=0
and a.id<b.id
and b.id=charindex(@splitchar2,@str,a.id)
)
go
--调用
select * from f_split_2('<年借方发生额:101> + <年借方发生额:10201> + <年借方发生额:10202> ',':','>')
--结果
/*
re
-----------------
101
10201
10202
(所影响的行数为 3 行)
*/
Top




