sql server函数substring与substr用法注意事项

发布时间:2019-08-07编辑:脚本学堂
有关sql server数据库中substring函数与substr函数的用法,以及相关注意事项,substr只能作为处理英文字符串的函数使用,对于汉字往往会引起缺陷,需要的朋友参考下。

函数subString有三个参数,如下:
$sourceString  资源字符串。
$startingLoc   子字符串在资源字符串中的起点。如果此值为负数或 0,则只返回那些所在位置大于零的字符。如果此值大于 $sourceString 的长度,则返回长度为零的字符串。
$length        [可选] 要检索的字符数。如果没有指定此值,它将返回$startingLoc 中指定的位置开始直到字符串末尾的所有字符。
在试验中,本人发现第二个参数的解释中“如果此值为负数或 0,则只返回那些所在位置大于零的字符”有特殊的意义,也是一个陷阱:负数或0也将占去字符的位置。
 
例子:
 

declare @str nvarchar(20)
declare @subStr nvarchar(20)
set @str='123456'
set @subStr=subString(@str,1,5)
print @subStr
 

结果: @subStr值为'12345'
 
如果第二个参数$startingLoc给负数或0时,负数或0也将占去字符的位置,
比如:
 

set @subStr=subString(@str,0,5)
@subStr值为'1234'
 

位置0上没有字符,却占去一位的长度 
 

set @subStr=subString(@str,-1,5)
@subStr值为'123'
 

位置-1和位置0上没有字符,却占去了两位的长度。
 
所以得出以下结论:使用函数subString时,第二个参数$startingLoc虽然可以给0或负数,但最好给实际的开始位置,避免造成不必要的麻烦。

第二部分,sql中substr函数注意事项(www.jb200.com 整理)

substr只能作为处理英文字符串的函数使用,对于汉字往往会引起缺陷。

举例:
1、substr('一二三四',1,5)
2、substr('一二三四五六',1,5)

第一个的正确答案是“一二三四”,而第二的正确答案是“一二三四五”。

在程序中往往我们会使用substr函数作为一个输入语句的控制,比如更新表中一条数据,如果表中某一属性要求5位长度,我们会用上述两条语句保证不插入过长的语句,引起数据库报错 。例子:
 

UPDATE <em>SCHOOL </em>
SET <em>dept_no</em>=substr('高十二班',1,5)
WHERE <em>id</em>=12
 

这里面dept_no要求5位数据。但是,殊不知substr对于非英文字符不能起到想要的效果。
由于每个汉字占2位,但是substr会把一个汉字当做字符串中的一位。
当用这条语句更新数据库表中要求长度只有5的属性时,会报错的。