Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst SQL 2005 Server - Werden Daten falsch ausgelesen?

Mitglied: mf

mf (Level 1) - Jetzt verbinden

11.11.2008, aktualisiert 12.11.2008, 5261 Aufrufe, 9 Kommentare

Hi zusammen.

Wenn ich im SQL Management Studio des SQL2005-Servers eine Datentabelle abfrage, erhalte ich ein entsprechendes Ergebnis für ein spezielles Feld.

Das Ergebnis ist 500. bzw es wird als 500.0000000000000 ( ganze viele nullen ) angezeigt.

Das Feld ist vom Type "decimal(38,20)".

Wenn ich die Datenbank-Tabelle remote abrufe, in einem PHP-Script, so erhalte ich für einige Datensätze ein Ergebnis von 499.999999999 .. was ja nicht unbedingt 500 entspricht.

Nun ist meine Frage woran das liegen kann. Denn wenn ich mit dem ManagementStudio den Select absetze, scheint ja alles zu klappen.

Ich habe versuche mit "*1" das Problem zu lösen. Dies funktioniert auch soweit, aber wenn ich Felder mit der Anzeige habe/hatte, welche vorher 5000.00000000001 angezeigt haben, werden diese dann auch 4999.99999 (etc) angezeigt.

Hat einer eine Idee, um das Phänomen in den Griff zu bekommen?

Thx
Markus
Mitglied: filippg
11.11.2008 um 22:49 Uhr
Hallo,

man merke: Das Binärformat ist nicht zur Darstellung von Nachkommastellen im Dezimalsystem geeignet .
In sofern: benötigst du wirklich diesen Datentyp? Manchmal kann man sich auch behelfen, indem man Wert*1000 (o.ä.) speichert, d.h. den Wert auf Ganzzahlen normiert.

Gruß

Filipp
Bitte warten ..
Mitglied: mf
11.11.2008 um 23:07 Uhr
Hi Filipp.

Leider habe ich keinen Einfluss auf das Design der Datenbank. Dies ist ein gekauftes Produkt, welches aktuell auch unter dem Dach von Microsoft befindet.

Ich versuche lediglich Daten auszulesen, habe dafür extra einen ReadOnly-SQL-Account angelegt. Allerdings habe ich o.g. Problem.

Nachkommastellen benötige ich aber auf jeden Fall.

Der bisherige Trick "*1" klappt scheinbar nicht überall. Was die Ursache dafür ist, weiss ich nicht.

Ich versuche mal *1000/1000. Mal sehen, ob's was bringt.

Gruss
Markus
Bitte warten ..
Mitglied: Netzheimer
12.11.2008 um 07:33 Uhr
Das Problem bei decimal (auch numeric) ist, dass beim Berechnen Gesamtstellen (bei dir 38) und Nachkommastellen alleine (20) Berücksichtigt werden. In diesem Fall wären maximal 18 Stellen vor dem Komma und 20 Stellen danach. Das wird auch bei Berechnungen so berücksichtigt.

Kannst du sagen, warum du so eine Genauigkeit brauchst oder wäre auch float möglich?
Bitte warten ..
Mitglied: mf
12.11.2008 um 13:15 Uhr
"ich" brauche die Anzahl der Nachkommastellen nicht. Die Benutzer würden evtl mit vier Nachkommastellen auskommen.

Aber ... das System ist unantastbar.

D.h. ich muss einen Weg finden, der mit dieser obstrusen Beschaffenheit der Datenbank klar kommt.

Wenn du schreibst, dass nur gewissen Stellen in die Berechnung einfliesen .. Ist es möglich auch nur geziehlte eine bestimmte Anzahl an Stellen anzufragen?

ála .. SELECT nachkommas(Spaltenname,4) FROM tabelle

Wenn es eine Funktion gibt, die sowas machen kann, wäre das evtl schon eine Lösung. Bin leider in MSSql nicht so fit.

Thx
Markus
Bitte warten ..
Mitglied: Biber
12.11.2008 um 13:40 Uhr
Moin mf,

du kannst in diesem Fall vermutlich nur durch Probieren dem Ziel näher kommen.
Der M$-Server stellt vermeintlich "vergleichbare" Funktionen unter SSIS/TransAct-SQL bereit, die allerdings mal "runden", mal abschneiden..

In Frage kommen zum einen CAST/CONVERT-Funktionen, zum anderen die ROUND()-Funktion, nach der Du gefragt hast.

Zum Ziel führen sollte am ehesten
01.
SELECT ROUND( deineSpalte, 4) as feldname from deineTabelle; 
02.
-- oder-- 
03.
SELECT 1.0* ROUND( deineSpalte, 4) as feldname from deineTabelle;
Wobei zu prüfen bleibt, ob das Ergebnis identisch ist, wenn Du
  • mit der ROUND()-Funktion einen passenden View zusammentrümmerst (also die Logik im View hinterlegst)
  • die Round()-Funktion innerhalb eines dynamisch erzeugten Statements verwendest.

Laut MSDN ist das Ergebnis von Round() zwar immer -je nach Sichtweise- "richtig", aber eben unterschiedlich.
Redmonder Logik halt...

Grüße
Biber
Bitte warten ..
Mitglied: mf
12.11.2008 um 14:00 Uhr
Danke für deine Unterstützung.

Beide Vorschläge bzgl ROUND() funktionieren leider nicht.

ROUND(..., 4) liefert das gleiche "falsche" Ergebnis, mit mehr als 4 Nachkommastellen.
1* ROUND(..., 4) liefert das gleiche Ergebnis, als wenn ich auch nur " *1 " anfüge.

CAST/CONVERT hattest du noch angesprochen. Könntest Du hier noch ein kleines Beispiel posten?

"Netzheimer (Daniel)" schreibt, dass "float" evtl auch ausreichen könnte.

Wie kann ich die Spalte mit CAST/CONVERT umformen?

Thx
Markus

ps. Ich verwende keine Views ... (die Datenbank ist unantastbar. )
Bitte warten ..
Mitglied: mf
12.11.2008 um 14:15 Uhr
Hi Biber

Danke für den Denkanstoß CAST/CONVERT.

Mit unser aller Freund goo.... konnte ich eine Lösung finden.

CONVERT(decimal(38,10), spaltenmame) alias

Damit werden die amüsanten Daten nun korrigiert anzeigt, ohne eine Änderung an der Datenbank.

Thx
Markus
Bitte warten ..
Mitglied: Biber
12.11.2008 um 14:18 Uhr
Moin mf,

hmm, das "falsche ROUND()-Ergebnis mit mehr als 4 NK-Stellen" verstehe ich nicht...
Kannst Du mal Test-Query und Output posten bitte?

Beispiel zu CAST:

01.
SELECT CAST( datFeld  as decimal(18, 4)) as feldname  
02.
From DeineTabelle
Grüße
Biber
[Edit] Uuups, das war über Kreuz....
kannst Du trotzdem bitte noch das falsche Round()--Ergebnis posten... rein interessehalber?
[/Edit]
Bitte warten ..
Mitglied: mf
12.11.2008 um 16:21 Uhr
kannst Du trotzdem bitte noch das falsche Round()--Ergebnis posten... rein interessehalber?

Der Query ist wie bisher geblieben .. halt um das ROUND() ergänzt, aus Deinem Post.

Das Ergebnis war wie im ersten Post gewesen. Also 499.9999 (ganz viele 9er)

Einen Screen aus dem ManagementStudio könnte ich dir zwar posten, aber dort ist es ja erstaunlicherweise korrekt in der Anzeige.

Gruss
Markus
Bitte warten ..
Ähnliche Inhalte
Windows Server
SQL Server 2005
gelöst Frage von Jan1986Windows Server4 Kommentare

Hallo zusammen, wir haben in unserem Unternehmen mittlerweile 2 Server auf denen wir verschiedene Server virtualisieren. 1 Server ist ...

Microsoft Office

EMail auslesen, verschieben und mit Excel ausgelesene Daten weiterverarbeiten

gelöst Frage von GundelputzMicrosoft Office40 Kommentare

Hallo da draussen, Ich habe mal wieder eine Problemstellung bei der ich eure Hilfe brauche. Ich habe, in Outlook ...

Windows Server

SQL Server löscht Daten von sich selbst aus ?!

Frage von KevBarzWindows Server20 Kommentare

Hallo liebe Administrator-Fachwissenden :), wir benutzen bei uns im Haus seit Jahren ein Programm, dass Daten auf einem SQL-Server ...

Datenbanken

Excel Daten in SQL Server importieren

gelöst Frage von orausdoDatenbanken6 Kommentare

Hallo liebe Admins, frohes neues Jahr und alles Gute für 2016. Nun zu meiner Frage: In unserem Unternehmen nutzen ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 2 TagenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 3 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein interessanter Beitrag dazu: Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10 Anscheinend ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 3 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1016 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)12 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall10 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...