写个截取指定字符数的函数,请教如何修改。。

luoxp520 2008-09-10 02:31:02
写个截取指定字符数的函数,请教如何修改。。

CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
Return SUBSTRING ( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)> @StartIndex)
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
Return " ";
End


End
Else
Return @strChar;
End



提示
服务器: 消息 207,级别 16,状态 3,过程 GetStrLength,行 15
列名 ' ' 无效。
服务器: 消息 455,级别 16,状态 1,过程 GetStrLength,行 65535
函数中最后一条语句必须是返回语句。
...全文
193 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoli0813 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdhylj 的回复:]
SQL codeCREATEFunctionGetStrLength(@strCharvarchar(8000),@StartIndexInt,@LengthInt)Returnsvarchar(8000)AsBeginIflen(@strChar)>@LengthBeginIflen(@strChar)>(@StartIndex+@Length)ReturnSUBSTRING(@strChar,@StartIndex,@Length)ElseBeginIf(len(@strChar)>@StartIndex)ReturnSUBSTRING(@strChar,@StartIndex,(len(@strChar-@StartIndex)))ElseReturn'';--用单引号EndEnd--ElseReturn@strChar;End
[/Quote]

此兄弟正解!字符类型的怎么会""了呢。
luoxp520 2008-09-10
  • 打赏
  • 举报
回复
现在对存储过程进行了处理
但是查询分析器中执行得到正常的结果
可程序里却还是老错误
快晕了。。
请看
http://topic.csdn.net/u/20080910/16/1afd2e93-ed85-4682-a511-3bfa4ff1ff27.html
luoxp520 2008-09-10
  • 打赏
  • 举报
回复
谢谢pt1314917 。。没有看SQLSERVER自带的函数
pt1314917 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 luoxp520 的回复:]
我想实现的功能就是从指定的字符串中截取一定长度的字符
GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
它的三个参数分别是原字符串,起始位置,截取长度

修改了一下
还是有问题
请教各位看看逻辑还有问题吗

SQL code
CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>=@Length
Begin

[/Quote]

楼主,不要想那么复杂,8楼即可。。
smalltalks 2008-09-10
  • 打赏
  • 举报
回复
@strChar-@StartIndex
varchar-int能操作吗?
luoxp520 2008-09-10
  • 打赏
  • 举报
回复
我想实现的功能就是从指定的字符串中截取一定长度的字符
GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
它的三个参数分别是原字符串,起始位置,截取长度

修改了一下
还是有问题
请教各位看看逻辑还有问题吗

CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>=@Length
Begin
If len(@strChar)>=(@StartIndex+@Length)
Return SUBSTRING ( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)>= @StartIndex)
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
Return '';
End


End
Return SUBSTRING ( @strChar ,@StartIndex,(len(@strChar-@StartIndex)))
End






了無痕 2008-09-10
  • 打赏
  • 举报
回复
SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/*

陣列長度函數- 取得陣列長度

@Object 陣列字串

@SplitChar 分隔字元

@LEN 傳回長度

*/



ALTER FUNCTION [dbo].[fn_SplitLength](@Object nvarchar(4000), @SplitChar nvarchar(10))

RETURNS int AS

BEGIN

DECLARE @LEN int

DECLARE @nPOS int

SET @LEN=1

SET @nPOS=0



WHILE CHARINDEX(@SplitChar, @Object, @nPOS) > 0

BEGIN

SET @nPOS=CHARINDEX(@SplitChar, @Object, @nPOS)+1

SET @LEN=@LEN+1

END



RETURN @LEN

END
了無痕 2008-09-10
  • 打赏
  • 举报
回复
CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
Begin
Return SUBSTRING ( @strChar , @StartIndex , @Length )
end
Else
Begin
If (len(@strChar)> @StartIndex)
begin
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
end
Else
begin
Return ''
end
End


End
Else
begin
Return @strChar
end
End
linguojin11 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pt1314917 的回复:]
SQL code
--不需要判断@length的,如:
create Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
declare @return varchar(8000)
if(@StartIndex<0 or @Length<0)
set @return = ''
else
begin
set @return=substring(@strChar,@StartIndex,@Length)

end
return @return
End
[/Quote]
恩。。觉得不要判断@length,不然很乱。。
pt1314917 2008-09-10
  • 打赏
  • 举报
回复
那8楼应该就可以了``
luoxp520 2008-09-10
  • 打赏
  • 举报
回复
我想实现的功能就是从指定的字符串中截取一定长度的字符
GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
它的三个参数分别是原字符串,起始位置,截取长度


具体是你想实现啥功能?
你这函数肯定是有问题的,只看这里就知道有问题:
set @return= SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))

红色部分怎么能做操作?

红色的部分就是判断起始位置和指定长度是不是超过了原字符串长度,也即是非法的。。
pt1314917 2008-09-10
  • 打赏
  • 举报
回复

--不需要判断@length的,如:
create Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
declare @return varchar(8000)
if(@StartIndex<0 or @Length<0)
set @return = ''
else
begin
set @return=substring(@strChar,@StartIndex,@Length)

end
return @return
End
pt1314917 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 luoxp520 的回复:]
谢谢各位兄台,请教函数的逻辑上没有错误吧
[/Quote]

具体是你想实现啥功能?
你这函数肯定是有问题的,只看这里就知道有问题:
set @return= SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))

红色部分怎么能做操作?
luoxp520 2008-09-10
  • 打赏
  • 举报
回复
谢谢各位兄台,请教函数的逻辑上没有错误吧
pt1314917 2008-09-10
  • 打赏
  • 举报
回复

--这样:
CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
declare @return varchar(8000)
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
set @return= SUBSTRING( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)> @StartIndex)
set @return= SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
set @return= ''
End
End
Else
set @return= @strChar
return @return
End


水族杰纶 2008-09-10
  • 打赏
  • 举报
回复
CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
Return SUBSTRING ( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)> @StartIndex)
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
Return '''';--用''''或兩单引号 End


End
-- Else
Return @strChar;
End
love_cutezhou 2008-09-10
  • 打赏
  • 举报
回复

CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
Return SUBSTRING ( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)> @StartIndex)
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
Return ''
End


End
Else
begin
Return @strChar
end
return @strChar
End

天-笑 2008-09-10
  • 打赏
  • 举报
回复


CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
declare @retStr
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
begin
set @retStr =SUBSTRING ( @strChar , @StartIndex , @Length )

end
Else
Begin
If (len(@strChar)> @StartIndex)
begin
set @retStr =SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
end
Else
begin
set @retStr = ''
end
End
End
Else
begin
set @retStr = @strChar
end
Return @strChar
End
go
drop function GetStrLength
青锋-SS 2008-09-10
  • 打赏
  • 举报
回复

CREATE Function GetStrLength(@strChar varchar(8000),@StartIndex Int,@Length Int)
Returns varchar(8000)
As
Begin
If len(@strChar)>@Length
Begin
If len(@strChar)>(@StartIndex+@Length)
Return SUBSTRING ( @strChar , @StartIndex , @Length )
Else
Begin
If (len(@strChar)> @StartIndex)
Return SUBSTRING ( @strChar , @StartIndex,(len(@strChar-@StartIndex)))
Else
Return ' ';--用单引号
End


End
-- Else
Return @strChar;
End

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧