3

LIKEfloat フィールドに対して一致する数値結果を返すために使用しています。小数点の左側が 4 桁を超えると、小数点の右側の検索項目に一致する値が返されないようです。状況を示す例を次に示します。

CREATE TABLE number_like_test (
  num [FLOAT] NULL
)

INSERT INTO number_like_test (num) VALUES (1234.56)
INSERT INTO number_like_test (num) VALUES (3457.68)
INSERT INTO number_like_test (num) VALUES (13457.68)
INSERT INTO number_like_test (num) VALUES (1234.76)
INSERT INTO number_like_test (num) VALUES (23456.78)

SELECT num FROM number_like_test
WHERE num LIKE '%68%'

このクエリは、値が 12357.68 のレコードを返しませんが、値が 3457.68 のレコードを返します。また、68 の代わりに 78 を使用してクエリを実行しても 23456.78 レコードは返されませんが、76 を使用すると 1234.76 レコードが返されます。

では、質問に行きましょう: なぜ数値が大きいとこれらの結果が変化するのでしょうか? クエリを変更して期待される結果を得るにはどうすればよいですか?

4

5 に答える 5

2

すでにかなり解決されていますが、他の回答が示唆するように 2 回ではなく、1 回だけキャストする必要があります。LIKE は文字列変換を処理します。

SELECT *
FROM number_like_test
WHERE CAST(num AS DECIMAL(12,6)) LIKE '%68%'

丸め動作を示す SQL Fiddle は次のとおりです。SQL Fiddle

于 2013-06-12T16:09:09.023 に答える
1

これはおそらく、FLOAT データ型が数値の近似値である浮動小数点数を表し、正確な比較に依存するべきではないためです。

float 値を含む検索を行う必要がある場合は、10 進数データ型 (正確な数値を保持する) に格納するか、STR() 関数などを使用して varchar に変換する必要があります。

于 2013-06-12T16:01:34.830 に答える