2009-07-20 1 views
23

最近、クエリの長​​さを調べるためにクエリでlen()を使用すると、len()は値の末尾のスペースを数えていないときに問題に直面しました。しかし、datalength()は末尾のスペースもカウントしています。len()ssqlserver 2005のVs datalength()

これは、値の実際の長さを扱う操作をしている場合、len()に対してdalalength()を使用する必要があることを意味しますか?

例:特定の値の値を10文字の長さにする必要がある場合。つまり、値が3文字の長さであれば、それに7つのスペースを追加する必要があります。

ありがとうございます

答えて

16

はい、まさにあなたがしなければならないことです。空白を除いた文字数を取得するだけの場合は、関数を使用し、他のすべての場合はDATALENGTH()を使用します。

でもLEN()ドキュメントはあなたがここでDATALENGTH()

を使用する必要があります拡張子を表現するバイト数を取得するための情報を持っているが、MSDNのドキュメントへのリンクです:

LEN()

DATALENGTH()

+2

とLEN()実際に** ALSO **空白をカウントしない....... –

+0

LEN(N'testing 1 - 私は

LEN( '' '何とか何とか' +を)やりました2つの3つ、何もないgテストだけど)は、空白を含む41文字を返す(そしてDATALENGTH()は82を返します) –

+6

@marc_s ...それは末尾の空白をカウントしません。 LEN( 'HELLO')、LEN( 'HELLO')、LEN( 'HELLO')は5,5,10を連続して返します。これは文書化されています( "")。 –

30

注意してください。 DATALENGTHは、文字数ではなく、使用されたバイト数を返します。あなたの代わりにvarchar型のnvarchar型を使用する場合

+6

NVARCHARフィールドの+1 LENは文字列の文字数を返し、DATALENGTH()はその2倍の数値を返します(NVARCHARは文字あたり2バイトを格納します)。 –

+1

@marc_s 、 いつものように :) –

11

lenがないストレージに必要な使用される文字の数をカウントし、これはどちらか

この

を見てみましょう

lenは末尾のスペースをカウントしていなくても、より明白になるであろう

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


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

とデータ長のための出力= 10

2

ちょうど使用)(交換しながら、LENの出力が3:

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

これは、末尾のスペースを、LEN()が実際にカウントする文字に置き換えます。

DataLength()の問題は、Unicode文字列のデータ長を2で割る必要があるかどうかを知るためには、文字列がUnicode(nChar、nVarChar)またはASCII(Char、VarChar)であるかどうかを確認する必要があります。

0

Lenを使いこなそうとしていましたが、使用したほうが効率的かもしれませんが、Len(Replace( 'blah blah'、 '' '_') 提案を使用しようとしていました。 。1

関連する問題