ntextフィールドの文字数を数えたい。Pinal Daveのアドバイスに従って、私はdatalengthを使用しています。しかし、この関数は私が探している値を2倍にしているようです。フィールドの値を単語にコピーして文字数を数えると、1502になります。
select datalength(result) from myTable
3004文字の値を取得します。
なんで?
ntextフィールドの文字数を数えたい。Pinal Daveのアドバイスに従って、私はdatalengthを使用しています。しかし、この関数は私が探している値を2倍にしているようです。フィールドの値を単語にコピーして文字数を数えると、1502になります。
select datalength(result) from myTable
3004文字の値を取得します。
なんで?
Unicodeは1文字あたり2バイトです。フィールドNText
はUnicode文字列です。 DataLength()
フィールドを格納するために必要なバイト数を返し、文字数をLen()
返します。
From : "末尾の空白を除いLen()
て、指定された文字列式の文字数を返します。" 末尾の空白は除外されません。Unicode文字列の場合、文字数で長さを取得するために使用できます。DataLength
DataLength( UnicodeStringExpression ) / DataLength( N'#' )
Unicode文字列がバイト文字列タイプ(および)よりも優先されるデータ型の優先順位に基づいて値を返すため、通常DataLength( Left( Coalesce( StringExpression, '#' ), 1 ) )
は文字あたりのバイト数を返します。Coalesce
char
varchar
declare @Foo as VarChar(10) = 'Foo and ';
declare @Bar as NVarChar(10) = N'Bar and ';
select @Foo as [@Foo],
Len( @Foo ) as [Len (trimmed)], DataLength( @Foo ) as [DataLength (bytes)],
DataLength( Left( Coalesce( @Foo, '#' ), 1 ) ) as BytesPerCharacter,
DataLength( @Foo ) / DataLength( Left( Coalesce( @Foo, '#' ), 1 ) ) as 'Characters';
select @Bar as [@Bar],
Len( @Bar ) as [Len (trimmed)], DataLength( @Bar ) as [DataLength (bytes)],
DataLength( Left( Coalesce( @Bar, '#' ), 1 ) ) as BytesPerCharacter,
DataLength( @Bar ) / DataLength( Left( Coalesce( @Bar, '#' ), 1 ) ) as 'Characters';