SQL server 'wie' gegen ein float-Feld produziert inkonsistente Ergebnisse

Ich bin mit LIKE zurückkehren passenden numerischen Ergebnisse gegen ein float-Feld. Es scheint, dass, wenn es sind mehr als 4 stellen Links von der Dezimalstelle, Werte, die mit meinem Suchbegriff auf der rechten Seite der Dezimalstelle sind nicht zurückgekehrt. Hier ist ein Beispiel zur Veranschaulichung der situation:

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%'

Dass die Abfrage nicht zurück, wird der Datensatz mit dem Wert von 12357.68, aber es tut Rückkehr der Datensatz mit dem Wert von 3457.68. Auch die Ausführung der Abfrage mit 78 statt 68 nicht zurück 23456.78 aufnehmen, aber mit 76 gibt die 1234.76 aufnehmen.

So, die Frage: warum die eine größere Zahl bewirkt, dass diese Ergebnisse zu ändern? Wie kann ich meine Abfrage die erwarteten Ergebnisse erhalten?

  • verwenden Sie nicht LIKE gegen zahlen. Es ist ein string-Vergleich für strings verwendet.
  • was ist, wenn die numerischen Werte sind cast strings?
  • Sie könnte das tun, aber ich Schätze, der Grund, warum auf der Erde Sie?
  • Ich muss einige Benutzer Suche Artikel gegen numerische Felder, auf denen die Ergebnisse, die Sie wollen, mit 'wie'. Was ist die alternative?
  • Wie ist nicht das problem hier. Es kann funktionieren mit zahlen, implizite Konvertierung in string auftreten. Float ist das problem, es ist annähernd Datentyp - Schalter sollte man dezimal oder zumindest wirken zu dezimal, bevor Sie den Vergleich.
  • sqlfiddle.com/#!6/d41d8/4730
  • ja, du hast Recht. Die Antwort hier(stackoverflow.com/questions/15950705/...), scheint für mich arbeiten.

InformationsquelleAutor rosscj2533 | 2013-06-12
Schreibe einen Kommentar