0

TABLEAにタイプnVarchar(50)のフィールドがあり、テーブル結合関係で、タイプfloatの別のテーブルTABLEBの別のフィールドと照合したいと考えています。結合でこれら 2 つのフィールドを正しく一致させるにはどうすればよいですか?

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

次の 2 つのことを考慮する必要があります。

  1. float の内部表現は、最初は等しいように見える 2 つの数値の間に「小さな」違いを引き起こす可能性があります (ゼロとゼロの比較を除いて)。例として 1.9999999999 と 2.0 を取り上げます。

  2. float の文字列表現も14.55数学的に等しいので異なる場合があります1.455E2が、文字列はまったく異なって表示されます (異なる文字が含まれます)。

したがって、実際に比較できるのはrangeだけです。浮動小数点数の範囲(私見の方が良い)または文字列の範囲を比較できます(浮動小数点数が両側で同じようにフォーマットされていることを確認する場合:小数点以下の桁数が同じで、指数表記がないなど)。

私が言いたいのは、SQL に文字列を解析させて (CONVERTたとえば、使用して) float にし、数値のが等しいと見なせるほど小さいかどうかを確認する必要があるということです。たとえばABS(a - b) < 0.0000001

于 2012-08-31T14:07:44.370 に答える