求助!传递给 LEFT 或 SUBSTRING 函数的长度参数无效

Fox1230 2016-07-14 04:41:01
ALTER FUNCTION [dbo].[getLWH]
(
@LWH NVARCHAR(50),
@TYPE NVARCHAR(50)
)
RETURNS NVARCHAR(50)
BEGIN
DECLARE @LENGTH NVARCHAR(50),@WIDTH NVARCHAR(50),@HEIGHT NVARCHAR(50),@TLEN INT,@TEMP NVARCHAR(50)

IF CHARINDEX('*',@LWH)<>0
SET @LENGTH = SUBSTRING(@LWH,1,CHARINDEX('*',@LWH)-1)
SET @TEMP = SUBSTRING(@LWH,CHARINDEX('*',@LWH)+1,LEN(@LWH)-CHARINDEX('*',@LWH))
SET @WIDTH = SUBSTRING(@TEMP,1,CHARINDEX('*',@TEMP)-1) --NOT VERY CLEAR
SET @HEIGHT = SUBSTRING(@TEMP,CHARINDEX('*',@TEMP)+1,LEN(@TEMP)-CHARINDEX('*',@TEMP))
--SUBSTRING(@TEMP,CHARINDEX('*'@TEMP)+1,LEN(@TEMP)-CHARINDEX('*',@TEMP))

IF CHARINDEX('×',@LWH)<>0
SET @LENGTH = SUBSTRING(@LWH,1,CHARINDEX('×',@LWH)-1)
SET @TEMP = SUBSTRING(@LWH,CHARINDEX('×',@LWH)+1,LEN(@LWH)-CHARINDEX('×',@LWH))
SET @WIDTH = SUBSTRING(@TEMP,1,CHARINDEX('×',@TEMP)-1) --NOT VERY CLEAR
SET @HEIGHT = SUBSTRING(@TEMP,CHARINDEX('×',@TEMP)+1,LEN(@TEMP)-CHARINDEX('×',@TEMP))

IF CHARINDEX('*',@LWH)=0 AND CHARINDEX('×',@LWH)=0 AND CHARINDEX('.',@LWH)=0
SET @TLEN = LEN(@LWH)
SET @LENGTH = SUBSTRING(@LWH,1,@TLEN-8)
SET @WIDTH = SUBSTRING(@LWH,@TLEN-7,4)
SET @HEIGHT = SUBSTRING(@LWH,@TLEN-3,4)

IF @LWH='8.82.42.92'
SET @LENGTH ='8.8'
SET @WIDTH ='2.4'
SET @HEIGHT='2.92'

IF @LWH='9.882.433.25'
SET @LENGTH ='9.88'
SET @WIDTH ='2.43'
SET @HEIGHT='3.25'

IF @LWH='10.5052.53.04'
SET @LENGTH ='10.505'
SET @WIDTH ='2.5'
SET @HEIGHT='3.04'

IF @LWH='5995'
SET @LENGTH=''
SET @WIDTH=''
SET @HEIGHT=''

IF @LWH='2010.11.02'
SET @LENGTH=''
SET @WIDTH=''
SET @HEIGHT=''

IF @LWH='0'
SET @LENGTH=''
SET @WIDTH=''
SET @HEIGHT=''

IF @LWH='G690HB00063'
SET @LENGTH=''
SET @WIDTH=''
SET @HEIGHT=''

IF @TYPE='L'
RETURN @LENGTH
IF @TYPE='W'
RETURN @WIDTH
IF @TYPE='H'
RETURN @HEIGHT

RETURN ''

END


这个函数是处理数据库中长宽高的函数,但是用的时候遇到了这个错误提示。
求大神指导
...全文
278 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-07-14
  • 打赏
  • 举报
回复
提问时数据直接贴出来,截图需要一个个输入测,浪费大家时间
唐诗三百首 2016-07-14
  • 打赏
  • 举报
回复
这个属于数据和程序逻辑问题, 没法帮你排查的喔.
Fox1230 2016-07-14
  • 打赏
  • 举报
回复
引用 5 楼 u010047008 的回复:
[quote=引用 1 楼 ap0405140 的回复:] 需结合具体数据才能排查报错的具体语句,然后修改.
[/quote] 这是部分数据
Fox1230 2016-07-14
  • 打赏
  • 举报
回复
引用 1 楼 ap0405140 的回复:
需结合具体数据才能排查报错的具体语句,然后修改.

shoppo0505 2016-07-14
  • 打赏
  • 举报
回复
里面应该有不符合规则的数据吧
Fox1230 2016-07-14
  • 打赏
  • 举报
回复
引用 1 楼 ap0405140 的回复:
需结合具体数据才能排查报错的具体语句,然后修改.
楼上回复
Fox1230 2016-07-14
  • 打赏
  • 举报
回复
是这样的,数据库里有一个字段,长宽高,但是里头数据有的是没分割的毫米数值,有的是用*号分割,有的是带小数点的米数值。目的是要拆分字段为三个长、宽、高,根据每个情况去拆分,所以写出来这个函数,我对函数不是很了解,跌跌撞撞写出来的。
我觉得就是substring函数有问题。
唐诗三百首 2016-07-14
  • 打赏
  • 举报
回复
需结合具体数据才能排查报错的具体语句,然后修改.

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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