SQLServer中的Float上的Len函数给出了错误的长度

Gau*_*wal 1 sql t-sql sql-server

我在SQL Server中使用以下查询.

declare @dt float
set @dt = 1079938.05
select @dt AS Val,Convert(nvarchar(20),@dt) AS NVal, len(@dt) AS Len
Run Code Online (Sandbox Code Playgroud)

它的输出是

Val         NVal            Len
1079938.05  1.07994e+006    12
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 'Val'列显示正确的值.
  2. 'NVal'列显示奇怪的价值请解释我们为什么这样显示?
  3. 'Len'显示长度,其实际长度为10,但它显示了我们12.请解释为什么它显示12而不是10.

Shn*_*ugo 7

甲float在SQL服务器可以是4或8个字节.查找详情.

LEN()是一个测量字符串长度的函数.所以你想要测量值的字符串表示的长度,而不是值本身.

显示的显示值1.07994e+006是科学记数法,有12个字符.这里没有错.

您的呼叫使用默认值Convert(nvarchar(20),@dt)调用CONVERT()-function FLOAT and REAL(此处为详细信息和其他格式),这对于大于6位的数字是科学的.当你调用'len(@dt)'时,同样会发生同样的情况.由于输入LEN()必须是字符串,因此转换该值然后将其传递给函数.

你可以做什么:

无论如何你必须考虑,你看到的文字不是真正的价值.