最近、クエリで使用len()
してクエリの長さを調べるときlen()
に、値の末尾のスペースがカウントされないという問題に直面しました。しかしdatalength()
、末尾のスペースもカウントしています。
これは、値の実際の長さを処理する操作を行っている場合、dalalength()
overを使用する必要があることを意味しますかlen()
?
例: 特定の値の値を 10 文字にする必要がある場合。つまり、値が 3 文字の長さの場合、7 つのスペースを追加する必要があります。
最近、クエリで使用len()
してクエリの長さを調べるときlen()
に、値の末尾のスペースがカウントされないという問題に直面しました。しかしdatalength()
、末尾のスペースもカウントしています。
これは、値の実際の長さを処理する操作を行っている場合、dalalength()
overを使用する必要があることを意味しますかlen()
?
例: 特定の値の値を 10 文字にする必要がある場合。つまり、値が 3 文字の長さの場合、7 つのスペースを追加する必要があります。
気をつけて。 DATALENGTHは、文字数ではなく、使用されたバイト数を返します。
len は、必要なストレージではなく、使用される文字数をカウントします。これは、varchar の代わりに nvarchar を使用するとさらに明白になります。
len は末尾のスペースもカウントしません
これを見てください
declare @v nchar(5)
select @v ='ABC '
select len(@v),datalength(@v)
len の出力は 3 ですが、datalength の出力は 10 です。
Replace() を使用するだけです。
SELECT LEN(REPLACE(N'4 Trailing Spaces: ', ' ', '_'))
これにより、末尾のスペースが、LEN() が実際にカウントする文字に置き換えられます。
DataLength() の問題は、Unicode 文字列のデータ長を 2 で割る必要があるかどうかを知るために、文字列が Unicode (nChar、nVarChar) か ASCII (Char、VarChar) かを追跡する必要があることです。