2009-07-20 63 views
23

最近我在查询中使用len()来查找查询的长度时遇到了一个问题,len()不计算值中的尾随空格。但是datalength()也会计算尾部空格。在sqlserver 2005中len()Vs datalength()

这是否意味着如果我正在做一些处理值的实际长度的操作,那么我必须在len()上使用dalalength()。例如:如果我需要一个特定值的值是10个字符长度。即如果值是3个字符长度,我必须给它添加7个空格。

Regards

回答

16

是的,这正是你必须做的。如果你想获得不包含空格的字符数,你可以使用LEN()函数,而在所有其他情况下使用DATALENGTH()

即使LEN()文档有一个信息,要得到字节来表示分机的号码,你应该使用DATALENGTH()

这里是链接到MSDN文档:

LEN()

DATALENGTH()

+2

和LEN()确实不** ** ALSO计数空格....... – 2009-07-20 05:27:03

+0

LEN(N'testing一个两三个,没什么g但是测试')返回41个字符,包括空格(和DATALENGTH(),返回82) – 2009-07-20 05:27:35

30

小心。 DATALENGTH返回使用的字节数,而不是字符数。

11

len个计数使用不需要存储的字符数,这将更加明显,当你使用nvarchar的,而不是为varchar

LEN不计尾随空格或者

看看这个

declare @v nchar(5) 
select @v ='ABC ' 


select len(@v),datalength(@v) 

和输出为len为3,而输出为数据长度= 10

2

只需使用替换():

SELECT LEN(REPLACE(N'4 Trailing Spaces: ', ' ', '_')) 

这将用LEN()将实际计数的字符替换尾随空格。

DataLength()的问题是你必须跟踪你的字符串是Unicode(nChar,nVarChar)还是ASCII(Char,VarChar)来知道你是否还需要将Unicode字符串的数据长度除以2。

0

我正要使用Len(替换('blah blah','','_') 建议,当它给我带来的效果可能会更好。我做

LEN( '等等等等' + '') - 1