SQL Server中成功将浮点与Nvarchar(50)匹配
我在表a中有一个类型为nVarchar(50)的字段,我想与另一个表中的另一个字段相匹配,表B在表联接关系中的类型为float。如何在我的联接中成功匹配这两个字段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)) 你需要考虑两件事: 浮点的内部表示可能会导致两个数字之
left join UPS u on RTRIM( LTRIM(Str(u.Float_Field,10, 10))) = e.NVarchar_Field
我同意这是一个坏主意,但如果你需要这个,这里有一个想法: 您可以尝试在浮点上使用
CAST(…作为nchar(10))
你需要考虑两件事:
14.55
在数学上等于1.455E2
,但字符串的表示方式完全不同(包含不同的字符)我的意思是,你需要让SQL解析你的字符串去浮动(例如使用<代码>转换>代码>),然后检查数字之间的<强>差异> /强>是否足够小,你可以认为它们是相等的。例如
ABS(a-b)<0.0000001
为什么?即使你成功了,也会一团糟。现在请停止尝试。我将它切换到nvarchar(50)。那有帮助吗?本质上,我想将表中NVarchar(50)列的类型更改为Float,但不确定如何执行。因此,如果您能够帮助我了解如何在表设计中从Varchar更改为Float,我们将不胜感激。请尝试重命名该列,并使用Float创建新列。然后,您可以尝试根据旧列更新新列,然后删除旧列。