最近我在查询中使用len()来查找查询的长度时遇到了一个问题,len()不计算值中的尾随空格。但是datalength()也会计算尾部空格。在sqlserver 2005中len()Vs datalength()
这是否意味着如果我正在做一些处理值的实际长度的操作,那么我必须在len()上使用dalalength()。例如:如果我需要一个特定值的值是10个字符长度。即如果值是3个字符长度,我必须给它添加7个空格。
Regards
最近我在查询中使用len()来查找查询的长度时遇到了一个问题,len()不计算值中的尾随空格。但是datalength()也会计算尾部空格。在sqlserver 2005中len()Vs datalength()
这是否意味着如果我正在做一些处理值的实际长度的操作,那么我必须在len()上使用dalalength()。例如:如果我需要一个特定值的值是10个字符长度。即如果值是3个字符长度,我必须给它添加7个空格。
Regards
是的,这正是你必须做的。如果你想获得不包含空格的字符数,你可以使用LEN()
函数,而在所有其他情况下使用DATALENGTH()
。
即使LEN()
文档有一个信息,要得到字节来表示分机的号码,你应该使用DATALENGTH()
这里是链接到MSDN文档:
小心。 DATALENGTH返回使用的字节数,而不是字符数。
len个计数使用不需要存储的字符数,这将更加明显,当你使用nvarchar的,而不是为varchar
LEN不计尾随空格或者
看看这个
declare @v nchar(5)
select @v ='ABC '
select len(@v),datalength(@v)
和输出为len为3,而输出为数据长度= 10
只需使用替换():
SELECT LEN(REPLACE(N'4 Trailing Spaces: ', ' ', '_'))
这将用LEN()将实际计数的字符替换尾随空格。
DataLength()的问题是你必须跟踪你的字符串是Unicode(nChar,nVarChar)还是ASCII(Char,VarChar)来知道你是否还需要将Unicode字符串的数据长度除以2。
我正要使用Len(替换('blah blah','','_') 建议,当它给我带来的效果可能会更好。我做
LEN( '等等等等' + '') - 1
和LEN()确实不** ** ALSO计数空格....... – 2009-07-20 05:27:03
LEN(N'testing一个两三个,没什么g但是测试')返回41个字符,包括空格(和DATALENGTH(),返回82) – 2009-07-20 05:27:35