我在TABLEA中有一个nVarchar(50)类型的字段,我想在表连接关系中匹配另一个表中的另一个字段,即float类型的TABLEB 。如何在我的联接中成功匹配这两个字段?
left join UPS u on RTRIM( LTRIM(Str(u.Float_Field,10, 10))) = e.NVarchar_Field
我在TABLEA中有一个nVarchar(50)类型的字段,我想在表连接关系中匹配另一个表中的另一个字段,即float类型的TABLEB 。如何在我的联接中成功匹配这两个字段?
left join UPS u on RTRIM( LTRIM(Str(u.Float_Field,10, 10))) = e.NVarchar_Field
你需要考虑两件事:
浮点数的内部表示可能会导致最初看起来相等的两个数字之间的“微小”差异(除了可能将零与零进行比较)。以 1.9999999999 和 2.0 为例。
浮点数的字符串表示也可以不同,因为14.55
在数学上等于1.455E2
但字符串的呈现方式完全不同(包含不同的字符)。
因此,您唯一可以实际比较的是范围。您可以比较浮点数的范围(恕我直言更好)或字符串的范围(前提是您确保浮点数两边的格式相同:小数点后的位数相同,没有指数符号等)。
我的意思是,您需要让 SQL 将您的字符串解析为浮点数(CONVERT
例如使用),然后检查数字之间的差异是否足够小,以至于您可以认为它们相等。例如ABS(a - b) < 0.0000001
.