34

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

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

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

4

6 に答える 6

36

気をつけて。 DATALENGTHは、文字数ではなく、使用されたバイト数を返します。

于 2009-07-20T04:28:33.060 に答える
22

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

ドキュメントにもLEN()、使用する必要がある拡張子を表すバイト数を取得するという情報がありますDATALENGTH()

MSDN ドキュメントへのリンクは次のとおりです。

レン()

データ長()

于 2009-07-20T04:26:34.530 に答える
11

len は、必要なストレージではなく、使用される文字数をカウントします。これは、varchar の代わりに nvarchar を使用するとさらに明白になります。

len は末尾のスペースもカウントしません

これを見てください

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


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

len の出力は 3 ですが、datalength の出力は 10 です。

于 2009-07-20T14:20:51.563 に答える
2

Replace() を使用するだけです。

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

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

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

于 2013-03-18T21:34:53.527 に答える