2009-07-20 101 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