myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Sqlproblem bei Datenspaltenvergleich mit float-Werten
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Sqlproblem bei Datenspaltenvergleich mit float-Werten

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
oehrle oehrle ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.06.2009
Beiträge: 382
Entwicklungsumgebung: VisualStudio 2010/2012
Herkunft: Germany


oehrle ist offline

Sqlproblem bei Datenspaltenvergleich mit float-Werten

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
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:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
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:

- Caste ich die Werte in "real" oder "float", oder
- addiere ich +0.00001 auf den 3. "AND"-Vergleich 29,72001 + 0.00001

dann wird der Datensatz gefunden.

Hat jemand eine Idee an was das genau liegt oder worauf man dabei achten soll?

oehrle hat dieses Bild (verkleinerte Version) angehängt:
sql-Problem.gif
Volle Bildgröße

Neuer Beitrag 24.04.2019 06:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 450
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 24.04.2019 08:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
witte
myCSharp.de-Mitglied

Dabei seit: 03.09.2010
Beiträge: 920


witte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum nimmst du nicht den numeric data type?
Neuer Beitrag 24.04.2019 10:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
oehrle oehrle ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.06.2009
Beiträge: 382
Entwicklungsumgebung: VisualStudio 2010/2012
Herkunft: Germany

Themenstarter Thema begonnen von oehrle

oehrle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 24.04.2019 11:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 450
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok, um es noch abzurunden:  decimal vs numeric

Grüße
Neuer Beitrag 24.04.2019 16:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.667
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Neuer Beitrag 24.04.2019 20:32 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.10.2020 22:17