为了账号安全,请及时绑定邮箱和手机立即绑定

定义SQL用户函数取单元格内值?

定义SQL用户函数取单元格内值?

慕桂英3389331 2019-02-05 14:06:06
定义SQL用户函数取单元格内值
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

substring参数使用不正确,很明显,错误也在提示你这个原因!

substring一共要三个参数,第一个为要截的字符,第二个为字符串截取的起始位置,最后一个为要截取的长度!

很明显你要截取的字符串是@content,
起始位置为@spaceindex1+len(@text1),
长度为@spaceindex2-@spaceindex1-len(@text1)
这几个值你写的都是正确的,但我们必须要考虑一些意外情况!

varchar与nvarchar两者之间的区别!还有就是查找不到的情况!比如你输入的错了一个字符,那么就会导致@spaceindex1与@spaceindex2都为0第一个式子还好说,而第二个,也就是说长度会变为负值,而substring就会报错!

所以我们不妨先测试一下@spaceindex2的值,若为0时,则直接让其等于len(@content),这样如果查不到由直接返回整个字串,当然如果是@spaceindex1不为0时,还可以照样截取.

另一种情况也是你程序中常出现的错误!

set @spaceindex2=charindex(@text2,@content)如果反过来了,也是得到的负值的.好在charindex支持第三个参数!
set @spaceindex2=charindex(@text2,@content,@spaceindex1+1)
这样做的目的是保证@spaceindex2大于@spaceindex1,否则照出现错误!为了杜绝重复引起的错误,最好是
set @spaceindex2=charindex(@text2,@content,@spaceindex1+1+len(@text1))
这样保证了@spaceindex2-len(@text1)也大于@spaceindex1

最后的那个varchar与nvarchar两者的区别,建议你如果处理有中文最好用nvarchar,因为这两个在统计长度是不至于出错的!

我想你最终的程序,应该是好修改的吧?



查看完整回答
反对 回复 2019-03-19
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

先做个判断@content 是否含有@text1,@text2
如果没有直接返回''
if @spaceindex1=0 or @spaceindex2=0
begin
@return=''
end
else
begin
set @return=substring(@content,@spaceindex1+len(@text1),@spaceindex2-@spaceindex1-len(@text1))
end
return @return
end



查看完整回答
反对 回复 2019-03-19
  • 2 回答
  • 0 关注
  • 574 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信