Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么SQL Len函数为此查询返回7?_Sql_Sql Server_Tsql - Fatal编程技术网

为什么SQL Len函数为此查询返回7?

为什么SQL Len函数为此查询返回7?,sql,sql-server,tsql,Sql,Sql Server,Tsql,对于此TSQL查询: SELECT CAST(116.33 / 8 AS FLOAT) AS [Float Value] , LEN(CAST(116.33 / 8 AS FLOAT)) AS [Length of Float Value] , LEN(CAST(CAST(116.33 / 8 AS FLOAT) AS VARCHAR)) AS [Length Cast As Varchar] 结果: Float Value | Length of Float Value | Len

对于此TSQL查询:

SELECT CAST(116.33 / 8 AS FLOAT) AS [Float Value]
 , LEN(CAST(116.33 / 8 AS FLOAT)) AS [Length of Float Value]
 , LEN(CAST(CAST(116.33 / 8 AS FLOAT) AS VARCHAR)) AS [Length Cast As Varchar]
结果:

Float Value  | Length of Float Value  |  Length Cast As Varchar
14.54125     | 7                      |  7

为什么当我扮演Varchar时,LEN得到的是7而不是8?另外,什么隐式转换或转换将为LEN产生8?

如果我错了,请纠正我,但是float的标准精度是7,因此这可能是您的问题

首先将结果强制转换为float,结果为7位数字

请查看此microsoft

隐式转换- 请参阅此链接

非常相关,@rbr94的回答很好地解释了这一点:

LEN()在[N]VARCHAR()上工作,因此您正在运行从FLOAT到VARCHAR的隐式转换

通过扩展您的查询可以很容易地证明这一点:

SELECT CAST(116.33 / 8 AS FLOAT) AS [Float Value]
 , LEN(CAST(116.33 / 8 AS FLOAT)) AS [Length of Float Value]
 , LEN(CAST(CAST(116.33 / 8 AS FLOAT) AS VARCHAR)) AS [Length Cast As Varchar]
 , CAST(CAST(116.33 / 8 AS FLOAT) AS VARCHAR) AS [Cast As Varchar]

Float Value Length of Float Value   Length Cast As Varchar  Cast As Varchar
14.54125    7                       7                       14.5413

你知道我该怎么做才能拿到8分吗?我现在看到了隐式转换,但我所转换或转换的内容都没有给我字符长度“14.54125”(8)。我将更新我的问题以包括这个警告。LEN(CAST(116.33/8为十进制(9,5)))产生8。我之所以尝试使用FLOAT而不是Decimal(9,5),是因为我不希望后面的零被计算为LEN的一部分。示例:14.54000(我不希望尾随的零和浮点数去掉它们,但它也暴露了LEN问题)