gpt4 book ai didi

sql - 为什么 sql server datalength 函数会使我的字段长度加倍?

转载 作者:行者123 更新时间:2023-12-02 07:42:06 24 4
gpt4 key购买 nike

我想计算 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com