3

ntextフィールドの文字数を数えたい。Pinal Daveのアドバイスに従って、私はdatalengthを使用しています。しかし、この関数は私が探している値を2倍にしているようです。フィールドの値を単語にコピーして文字数を数えると、1502になります。

select datalength(result) from myTable 

3004文字の値を取得します。

なんで?

4

1 に答える 1

8

Unicodeは1文字あたり2バイトです。フィールドNTextはUnicode文字列です。 DataLength()フィールドを格納するために必要なバイト数を返し、文字数をLen()返します。

From : "末尾の空白を除いLen()て、指定された文字列式の文字数を返します。" 末尾の空白は除外されません。Unicode文字列の場合、文字数で長さを取得するために使用できます。DataLengthDataLength( UnicodeStringExpression ) / DataLength( N'#' )

Unicode文字列がバイト文字列タイプ(および)よりも優先されるデータ型の優先順位に基づいて値を返すため、通常DataLength( Left( Coalesce( StringExpression, '#' ), 1 ) )は文字あたりのバイト数を返します。Coalescecharvarchar

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';
于 2012-04-04T20:02:41.453 に答える