函数subString有三个参数,如下:
$sourceString 资源字符串。
$startingLoc 子字符串在资源字符串中的起点。如果此值为负数或 0,则只返回那些所在位置大于零的字符。如果此值大于 $sourceString 的长度,则返回长度为零的字符串。
$length [可选] 要检索的字符数。如果没有指定此值,它将返回$startingLoc 中指定的位置开始直到字符串末尾的所有字符。
在试验中,本人发现第二个参数的解释中“如果此值为负数或 0,则只返回那些所在位置大于零的字符”有特殊的意义,也是一个陷阱:负数或0也将占去字符的位置。
例子:
结果: @subStr值为'12345'
如果第二个参数$startingLoc给负数或0时,负数或0也将占去字符的位置,
比如:
位置0上没有字符,却占去一位的长度
位置-1和位置0上没有字符,却占去了两位的长度。
所以得出以下结论:使用函数subString时,第二个参数$startingLoc虽然可以给0或负数,但最好给实际的开始位置,避免造成不必要的麻烦。
第二部分,sql中substr函数注意事项(www.jb200.com 整理)
substr只能作为处理英文字符串的函数使用,对于汉字往往会引起缺陷。
举例:
1、substr('一二三四',1,5)
2、substr('一二三四五六',1,5)
第一个的正确答案是“一二三四”,而第二的正确答案是“一二三四五”。
在程序中往往我们会使用substr函数作为一个输入语句的控制,比如更新表中一条数据,如果表中某一属性要求5位长度,我们会用上述两条语句保证不插入过长的语句,引起数据库报错 。例子:
这里面dept_no要求5位数据。但是,殊不知substr对于非英文字符不能起到想要的效果。
由于每个汉字占2位,但是substr会把一个汉字当做字符串中的一位。
当用这条语句更新数据库表中要求长度只有5的属性时,会报错的。