我想计算 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 字符串的优先级高于字节字符串类型( 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';
关于sql - 为什么 sql server datalength 函数使我的字段长度加倍?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10018320/