Sql server LTRIM和RTRIM截断浮点数
当我通过Sql server LTRIM和RTRIM截断浮点数,sql-server,Sql Server,当我通过LTRIM或RTRIM传递float值时,我正在经历一种我所说的完全出乎意料的行为: CREATE TABLE MyTable (MyCol float null) INSERT MyTable values (11.7333335876465) SELECT MyCol, RTRIM(LTRIM(MyCol)) lr, LTRIM(MyCol) l, RTRIM(MyCol) r FROM MyTable 它给出了以
LTRIM
或RTRIM
传递float
值时,我正在经历一种我所说的完全出乎意料的行为:
CREATE TABLE MyTable
(MyCol float null)
INSERT MyTable
values (11.7333335876465)
SELECT MyCol,
RTRIM(LTRIM(MyCol)) lr,
LTRIM(MyCol) l,
RTRIM(MyCol) r
FROM MyTable
它给出了以下结果:
MyCol | lr | l | r
--------------------------------------------
11.7333335876465 | 11.7333 | 11.7333 | 11.7333
我在SQL Server 2014和2016上观察到了相同的行为
现在,我的理解是,LTRIM
和RTRIM
应该从值中去掉空白,而不是强制转换/截断它
有人知道这里发生了什么吗
只是为了解释一下背景。我使用一组C#POCO的属性生成SQL查询(结果将用于生成MD5哈希,然后将其与Oracle表中的等效值进行比较),为了方便起见,我使用LTRIM/RTRIM包装了每一列。也许您可以改为使用format() 返回
11.7333335876465
看起来它被转换为字符串以满足函数要求。这没什么奇怪的,你为什么要从
float
数据类型中删掉一些空白呢?永远不会有。这只能应用于字符串表示。因此,当使用带浮点值的字符串函数时,会出现意外行为。“那就别这么做。”马丁史密斯——我在上面加了一个解释。
11.7333335876465