if exists(select * from sysobjects where type='FN' and name='getSplitNum')
drop function getSplitNum
go
create function getSplitNum(@content text,@split varchar(10))
returns int
as
begin
declare @index int;set @index=1;
declare @num int;set @num=0;
declare @start int;set @start=0;
while @index>0
begin
set @index=charindex(@split,@content,@start);
set @start=@index+1;
set @num=@num+1;
end
return @num;
end
godbo.getSplitNum(@c_url,'|||')存储过程里,如上代码,计算某字符串里,有多少个由|||分开的字符串. 运行结果最大值只有87,请教老师,问题在哪?---------------------------------------
问题基本查到.但不知道怎么解决.由于@c_url过长(长度达到13000字符以上),导致出现比实际值小很多.请教各位老师
drop function getSplitNum
go
create function getSplitNum(@content text,@split varchar(10))
returns int
as
begin
declare @index int;set @index=1;
declare @num int;set @num=0;
declare @start int;set @start=0;
while @index>0
begin
set @index=charindex(@split,@content,@start);
set @start=@index+1;
set @num=@num+1;
end
return @num;
end
godbo.getSplitNum(@c_url,'|||')存储过程里,如上代码,计算某字符串里,有多少个由|||分开的字符串. 运行结果最大值只有87,请教老师,问题在哪?---------------------------------------
问题基本查到.但不知道怎么解决.由于@c_url过长(长度达到13000字符以上),导致出现比实际值小很多.请教各位老师
解决方案 »
- 使用表值参数提示数据类型无效错误
- 重新发一贴,求一SQL语句,高手来!
- 如何给数据分列呢?
- SQL Server 2005中如何建立存储过程,好变态的新数据库啊!!!
- 求赐我一条SQL语句,两表数据拼接SQL语句怎么写?
- asp无法连接另外一台sql2000服务器
- SQL Server 2005 有Bug吗?
- 我要触发器update和insert分开处理应该怎么写,我写2个触发器名字他就报错,急
- 〓〓>===→ VB程序中,怎样从ADO的记录集能得到字段是否允许空值的属性?
- 运行sql查询分析器导入mdb数据报错
- 请教SQL高手:非固定时间段分类统计查询问题 (要求不用游标)
- 时间格式化-对高手说很简单
把@content 定义为ntext看看。
drop function getSplitNum
gocreate function getSplitNum(@content text,@split varchar(10))
returns int
as
begin
declare @index int;set @index=1;
declare @num int;set @num=0;
declare @start int;set @start=0;
-- set @content=cast(@content as varchar(max))
while @index>0
begin
--原因
set @index=charindex(@split,cast(@content as varchar(max)),@start);
set @start=@index+1;
set @num=@num+1;
end
return @num;
end
go
改成这样就对了,但是效率很低。
if exists(select * from sysobjects where type='FN' and name='getSplitNum')
drop function getSplitNum
gocreate function getSplitNum(@content varchar(max),@split varchar(10))
returns int
as
begin
declare @index int;set @index=1;
declare @num int;set @num=0;
declare @start int;set @start=0;
set @num=(len(@content)-len(replace(@content,@split,'')))
set @num=@num/len(@split)
--while @index>0
--begin
----原因
-- set @index=charindex(@split,cast(@content as varchar(max)),@start);
-- set @start=@index+1;
-- set @num=@num+1;
--end
return @num;
end
go
declare @t table(name varchar(max))
insert into @t select replicate(cast(newid() as varchar(max))+'|||',10000)
select dbo.getSplitNum(name,'|||') from @t
/*
-----------
10000
(1 行受影响)
*/