我想计算 ntext 字段中的字符数。 Following Pinal Dave's advice, I am using datalength 。但是这个功能似乎使我正在寻找的值(value)翻倍。当我将字段中的值复制到 word 并计算字符时,我得到 1502。但是当我这样做时

select datalength(result) from myTable

我得到 3004 个字符的值。

为什么?

最佳答案

Unicode 是每个字符两个字节。您的 NText 字段是一个 Unicode 字符串。 DataLength() 返回存储字段所需的字节数,Len() 返回字符数。
来自 Len() :“返回指定字符串表达式的字符数, 不包括尾随空格 。” DataLength 不排除尾随空白。对于 Unicode 字符串,您可以使用 DataLength( UnicodeStringExpression ) / DataLength( N'#' ) 来获取以字符为单位的长度。
通常 DataLength( Left( Coalesce( StringExpression, '#' ), 1 ) ) 将返回每个字符的字节数,因为 Coalesce 返回一个基于 data type precedence 的值,其中 Unicode 字符串的优先级高于字节字符串类型( charvarchar )。

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';

关于sql - 为什么 sql server datalength 函数使我的字段长度加倍?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10018320/

10-13 04:42