为什么SQL Len函数为此查询返回7?
对于此TSQL查询:为什么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
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问题)