Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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中成功将浮点与Nvarchar(50)匹配_Sql_Sql Server_Types - Fatal编程技术网

SQL Server中成功将浮点与Nvarchar(50)匹配

SQL Server中成功将浮点与Nvarchar(50)匹配,sql,sql-server,types,Sql,Sql Server,Types,我在表a中有一个类型为nVarchar(50)的字段,我想与另一个表中的另一个字段相匹配,表B在表联接关系中的类型为float。如何在我的联接中成功匹配这两个字段 left join UPS u on RTRIM( LTRIM(Str(u.Float_Field,10, 10))) = e.NVarchar_Field 我同意这是一个坏主意,但如果你需要这个,这里有一个想法: 您可以尝试在浮点上使用CAST(…作为nchar(10)) 你需要考虑两件事: 浮点的内部表示可能会导致两个数字之

我在表a中有一个类型为nVarchar(50)的字段,我想与另一个表中的另一个字段相匹配,表B在表联接关系中的类型为float。如何在我的联接中成功匹配这两个字段

left join UPS u on  RTRIM( LTRIM(Str(u.Float_Field,10, 10)))  = e.NVarchar_Field

我同意这是一个坏主意,但如果你需要这个,这里有一个想法:

您可以尝试在浮点上使用
CAST(…作为nchar(10))


你需要考虑两件事:

  • 浮点的内部表示可能会导致两个数字之间的“微小”差异,这两个数字起初似乎相等(除了比较零和零可能)。以1.99999999和2.0为例

  • 浮点数的字符串表示形式也可能有所不同,因为
    14.55
    在数学上等于
    1.455E2
    ,但字符串的表示方式完全不同(包含不同的字符)

  • 因此,唯一可以比较的是范围。您可以比较浮点的范围(最好是imho)或字符串的范围(前提是您确保浮点在两侧的格式相同:小数点后的位数相同,没有指数符号等)


    我的意思是,你需要让SQL解析你的字符串去浮动(例如使用<代码>转换>代码>),然后检查数字之间的<强>差异> /强>是否足够小,你可以认为它们是相等的。例如

    ABS(a-b)<0.0000001

    为什么?即使你成功了,也会一团糟。现在请停止尝试。我将它切换到nvarchar(50)。那有帮助吗?本质上,我想将表中NVarchar(50)列的类型更改为Float,但不确定如何执行。因此,如果您能够帮助我了解如何在表设计中从Varchar更改为Float,我们将不胜感激。请尝试重命名该列,并使用Float创建新列。然后,您可以尝试根据旧列更新新列,然后删除旧列。