DECLARE @mulisource varchar(MAX)
--赋值@mulisource 是一个长度为7994的字符串
print len(@mulisource)
DECLARE @valuesStr varchar(8000)
DECLARE @valuesStr1 varchar(8000)
DECLARE @valuesStr2 varchar(8000)
DECLARE @valuesStr4 varchar(8000)
set @valuesStr=substring(@mulisource,1,3500)
set @valuesStr1=substring(@mulisource,3501,3500)
set @valuesStr3=substring(@mulisource,1,7000)
set @valuesStr4=@valuesStr+@valuesStr1
print len(@valuesStr)
print len(@valuesStr1)
print len(@valuesStr3)
print len(@valuesStr4)
但是取得的结果
-------------------------
7994
3500
3500
6176
6176
问:为什么@valuesStr(3500字符)+@valuesStr1(3500字符) 结果只有6176,substring取得7000字符,为什么只能得到6176
------解决方案--------------------
空格导致的把,看我这个例子
DECLARE @mulisource varchar(MAX)
set @mulisource='0123 56789'
--赋值@mulisource 是一个长度为7994的字符串
print len(@mulisource)
DECLARE @valuesStr varchar(8000)
DECLARE @valuesStr1 varchar(8000)
DECLARE @valuesStr2 varchar(8000)
DECLARE @valuesStr3 varchar(8000)
set @valuesStr=substring(@mulisource,1,5)
set @valuesStr1=substring(@mulisource,6,10)
set @valuesStr3=substring(@mulisource,1,10)
select len(@valuesStr) ---4
select len(@valuesStr1) ----10
select len(@valuesStr3) ----4
------解决方案--------------------
据说SQL中substring来截取字符串,发现length的最大值只能有4000,超过4000的字符串的字符串就不会被截取到!
------解决方案--------------------
SQL中len()函数是不计算字符串末尾的空格的,例如len('abcd ')返回是4.
如下测试,
declare @mulisource varchar(MAX)
--赋值@mulisource是一个长度为30的字符串: 10个a+10个空格+10个a
select @mulisource=replicate('a',10)+replicate(' ',10)+replicate('a',10)
print 'len(@mulisource) = '+rtrim(len(@mulisource))
DECLARE @valuesStr varchar(8000)
DECLARE @valuesStr1 varchar(8000)
DECLARE @valuesStr3 varchar(8000)
DECLARE @valuesStr4 varchar(8000)
set @valuesStr=substring(@mulisource,1,8)
set @valuesStr1=substring(@mulisource,9,8)
set @valuesStr3=substring(@mulisource,1,16)
set @valuesStr4=@valuesStr+@valuesStr1
print 'len(@valuesStr) = '+rtrim(len(@valuesStr))
print 'len(@valuesStr1) = '+rtrim(len(@valuesStr1))
print 'len(@valuesStr3) = '+rtrim(len(@valuesStr3))
print 'len(@valuesStr4) = '+rtrim(len(@valuesStr4))
/*
len(@mulisource) = 30
len(@valuesStr) = 8
len(@valuesStr1) = 2
len(@valuesStr3) = 10
len(@valuesStr4) = 10
*/
------解决方案--------------------
如果要计算包含空格的字符串长度,可以用datalength()函数.