MSSQL 函数Len的计算漏洞

我今天遇到一个问题,接到Bug报告处理@@..

说人数计算有问题~

我用眼看后,想说为何明明是4个人,却会带出5的数字
举例:

declare @Str1 nvarchar(50)declare @Str2 nvarchar(50)set @Str1 = 'AAA ,BBB ,CCC ,EEE,'set @Str2 = 'DDD ,KKK ,XXX ,EEE ,'select len(@Str1) - len(replace(@Str1,',','')) Num1,len(@Str2) - len(replace(@Str2,',','')) Num2

结果
http://img2.58codes.com/2024/20061369r01uKHL2w1.png

后来为了查询Len判断空白问题,特别列出来,原来Len会将最右边的空白捨弃掉@@..
举例:

declare @Str3 nvarchar(50)declare @Str4 nvarchar(50)set @Str3 = '  'set @Str4 = ' , 'select len(@Str3) Num3,len(@Str4) Num4

结果
http://img2.58codes.com/2024/200613696BTmtpOZqe.png

所以为了避免奇怪的空白问题,就先把空白都取代掉再来判断
举例:

select len(replace(@Str1,' ','')) - len(replace(replace(@Str1,' ',''),',','')) Num1,len(replace(@Str2,' ','')) - len(replace(replace(@Str2,' ',''),',','')) Num2

结果
http://img2.58codes.com/2024/20061369mfcOBqoZM9.png

这样人数就正确了

关于那个空白是人为key的,并不是透过程式加上的~


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章