0

我在TABLEA中有一个nVarchar(50)类型的字段,我想在表连接关系中匹配另一个表中的另一个字段,即float类型的TABLEB 。如何在我的联接中成功匹配这两个字段?

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

2 回答 2

0

我同意这是一个坏主意,但如果您需要这样做,这里有一个主意:

你可以试试CAST(... as nchar(10))漂浮物。

像这儿

于 2012-08-31T14:00:56.400 回答
0

你需要考虑两件事:

  1. 浮点数的内部表示可能会导致最初看起来相等的两个数字之间的“微小”差异(除了可能将零与零进行比较)。以 1.9999999999 和 2.0 为例。

  2. 浮点数的字符串表示也可以不同,因为14.55在数学上等于1.455E2但字符串的呈现方式完全不同(包含不同的字符)。

因此,您唯一可以实际比较的是范围。您可以比较浮点数的范围(恕我直言更好)或字符串的范围(前提是您确保浮点数两边的格式相同:小数点后的位数相同,没有指数符号等)。

我的意思是,您需要让 SQL 将您的字符串解析为浮点数(CONVERT例如使用),然后检查数字之间的差异是否足够小,以至于您可以认为它们相等。例如ABS(a - b) < 0.0000001.

于 2012-08-31T14:07:44.370 回答