Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server LTRIM和RTRIM截断浮点数_Sql Server - Fatal编程技术网

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