verwendetes Datenbanksystem: <SqlServer 2008>
Hallo, ich habe folgendes Problem beim finden von Datensätzen, die in bestimmten Vorgabetoleranzen liegen.
Es gibt Werte (in der Datentabelle als float typisiert), die wurden zuvor berechnet und in die Datentabelle eingetragen.
Nun kommen täglich neue Daten, die müssen mit den vorhandenen Daten abgeglichen und zugeordnet werden.
Dazu habe ich mit eine Abfrage zusammengebaut, und setze diese (filtere) mit ADO-Net direkt an der Tabelle. Und dabei ist mir das aufgefallen, dass die Auswertung eingentlich passen sollte.
ABER: Bei der 3. "AND"-Verknüpfung scheiden sich die Geister. Die Bedingung sollte meiner Meinung nach passen, da die der Wert der Toleranzgrenze genau identisch mit dem verglichenen Wert sein soll.
Ich habe die beiden letzten Toleranzwerte der Abfrage deshalb auch mal bewusst berechnet ausgegeben, und die 3. "AND"-Verknüpfung mal ausgeblendet (damit auch ein Datensatz gefunden wird).
Hier mal die Abfrage wie sie sein sollte:
SELECT [SapMaterial]
,[FlankenwinkelStirnseitig]
,[FlankenwinkelSchaftseitig]
,[FlankenwinkelStirnseitigMittelwert]
,[FlankenwinkelSchaftseitigMittelwert]
,[KernbreiteMin]
,[KernbreiteMax]
,[Gewindeprofilnummer]
,[KernradiusMax]
,[KernradiusMin]
,[KopfradiusMax]
,[KopfradiusMin]
,(FlankenwinkelSchaftseitigMittelwert - 0.15) As FlankenwinkelSchaftseitigMittelwertMinTol
,(FlankenwinkelSchaftseitigMittelwert + 0.15) As FlankenwinkelSchaftseitigMittelwertMaxTol
FROM [dbo].[GewindeprofileGewindefraeser_Test]
WHERE KernbreiteMin >= 0.794 AND KernbreiteMin <= 0.799000029563904
AND (FlankenwinkelStirnseitigMittelwert - 0.15) <= 30.89467
AND (FlankenwinkelStirnseitigMittelwert + 0.15) >= 30.89467
AND (FlankenwinkelSchaftseitigMittelwert - 0.15) <= 29.72001
AND (FlankenwinkelSchaftseitigMittelwert + 0.15) >= 29.72001
Wenn ich nun die 3. "AND"-Verknüpfung deaktiviere, dann läuft das durch und der vorhandene Datensatz der zutreffen soll wird gefunden:
SELECT [SapMaterial]
,[FlankenwinkelStirnseitig]
,[FlankenwinkelSchaftseitig]
,[FlankenwinkelStirnseitigMittelwert]
,[FlankenwinkelSchaftseitigMittelwert]
,[KernbreiteMin]
,[KernbreiteMax]
,[Gewindeprofilnummer]
,[KernradiusMax]
,[KernradiusMin]
,[KopfradiusMax]
,[KopfradiusMin]
,(FlankenwinkelSchaftseitigMittelwert - 0.15) As FlankenwinkelSchaftseitigMittelwertMinTol
,(FlankenwinkelSchaftseitigMittelwert + 0.15) As FlankenwinkelSchaftseitigMittelwertMaxTol
FROM [dbo].[GewindeprofileGewindefraeser_Test]
WHERE KernbreiteMin >= 0.794 AND KernbreiteMin <= 0.799000029563904
AND (FlankenwinkelStirnseitigMittelwert - 0.15) <= 30.89467
AND (FlankenwinkelStirnseitigMittelwert + 0.15) >= 30.89467
--AND (FlankenwinkelSchaftseitigMittelwert - 0.15) <= 29.72001
AND (FlankenwinkelSchaftseitigMittelwert + 0.15) >= 29.72001
Also irgendwie verstehe ich das nicht. Besteht da intern ein Genauigkeitsproblem vom SqlServer mit float wenn er die Daten aus der Tabelle holt?
Was mit dabei aufgfallen ist:
dann wird der Datensatz gefunden.
Hat jemand eine Idee an was das genau liegt oder worauf man dabei achten soll?
Hallo,
vielleicht hilft dir das weiter: https://forums.asp.net/t/1115822.aspx
Hat ein ähnliches Problem mit dem float
Datentyp in SQL.
Zudem hier in der Doku
Grüße
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Hallo Witte, hast recht. Habe gerade mal noch damit rumgespielt. Mit Numeric(18,4) habe ich 4 Nachkommastellen. Übergebe ich einen Wert mit 5 Nachkommastellen, dann wird die 4. Nachkommastelle gerundet.
Ich denke das passt dann so.
Werde die Datenstruktr ändern und die Daten neu generieren lassen.
Ok, um es noch abzurunden: decimal vs numeric
Grüße
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"