|
|
Datentyp bei SQL Abfrage vorgeben |
|
Kraeusi |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.02.2016, 17:34
Titel: Datentyp bei SQL Abfrage vorgeben
|
 |
|
 |
|
Hallo,
ich habe ein kleines Problem und komme nicht mehr weiter, vielleicht könnt ihr mir einen Denkanstoß geben
Mein Problem ist folgendes:
Ich habe in einer Datenbank eine Spalte, dessen Wert ich abfragen möchte. Der Spaltentyp ist Image. Als Inhalt ist aber ein String gespeichert, im Hex-Format. Dieser String ist ca. 17000 Zeichen lang.
Nun Frage ich diesen Wert normal ab und erhalte auch ein Ergebnis. Da Matlab aber weder HEX noch Image erkennt, formatiert er mir den Wert zu int8 um, wodurch das Resultat nur noch 8500 Zeichen lang ist. Dabei werden alle Hexwerte weitestgehend umgerechnet.
Ich wollte nun mir die Werte wieder zurück in das HEX-Format holen (brauche ich für die weitere Verarbeitung)
Das Funktioniert soweit ganz gut, aber nicht zu 100%. Da bei der Abfrage auch auf einmal negative Werte (-1) auftauchen, werden diese dementsprechend nicht richtig wieder zurück gewandelt.
Meine Fragen an euch wären nun:
- Kann ich Matlab zwingen, die Daten beim Abfragen nicht als int8 zu speichern sondern direkt als String?
- Warum macht Matlab aus Bereichen wie FFFFFFFF den Wert -1? Dementsprechend habe ich dann Probleme beim zurück wandeln meiner Daten (Formel oben) und erhalte nur 0, was jedoch falsch ist.
Danke und Gruß
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 14.02.2016, 19:17
Titel: Re: Datentyp bei SQL Abfrage vorgeben
|
 |
Hallo Kraeusi,
Zitat: |
- Kann ich Matlab zwingen, die Daten beim Abfragen nicht als int8 zu speichern sondern direkt als String? |
Bitte poste den Befehl, mit dem Du die Daten bisher importierst.
Zitat: |
- Warum macht Matlab aus Bereichen wie FFFFFFFF den Wert -1? Dementsprechend habe ich dann Probleme beim zurück wandeln meiner Daten (Formel oben) und erhalte nur 0, was jedoch falsch ist. |
Wenn man 'FF' in eine Dezimalzahl umwandelt, ist das entweder 255 als UINT8 oder eben -1, wenn es in ein INT8 umgewandelt wird. Wieso die Daten in INT8 umgewandelt werden, wird erst klar, wenn Du den Befehl zeigst, bei dem das geschieht.
Was bedeutet genau der "Spalten-Typ Image"? Wie wird dies intern gespeichert? Was heißt "Matlab erkennt kein HEX"? Woraus schließt Du das?
Gruß, Jan
|
|
|
Kraeusi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.02.2016, 19:56
Titel:
|
 |
Hallo Jan,
danke für deine Antwort.
Der Befehl steht bereits oben, jedoch ist es vielleicht etwas unübersichtlich in einer Wurst hingeschrieben..
- Datenabfrage ->
Mit Spalten-Typ Image meine ich folgendes. Bei SQL, MySQL, MSSQL, .., wird jeder Spalte ein Typ zugewiesen, zum Beispiel Integer, Varchar, Char, .... . In diesem Fall ist es Image. Ich habe darauf leider keinen Einfluss, da es von einem bestehenden System so bereitgestellt wird, von dem ich Daten abrufe.
Danke und Gruß,
Kraeusi
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 14.02.2016, 20:42
Titel:
|
 |
Hallo,
der entscheidende Punkt ist, wie curs(1) bestimmt wird.
Das ist auch weiterhin unklar.
Grüße,
Harald
|
|
|
Kraeusi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.02.2016, 20:54
Titel:
|
 |
Ok, nun weiß ich was ihr meint, sry
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.02.2016, 12:56
Titel:
|
 |
|
|
Kraeusi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.02.2016, 14:56
Titel:
|
 |
Hallo Jan,
bei
erhalte ich 'cell'.
Der Link ist zwar gut, aber das Problem wird das gleiche bleiben, da er immer alles als int8 abspeichert.
Als alternative hatte ich mir überlegt, den Wert -1 zu 255 umzuwandeln. Wenn ich nun -1 oder -128 mittels uint32(x) versuche, erhalte ich jedoch nur 0.
Danke und Gruß,
Kraeusi
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.02.2016, 16:31
Titel:
|
 |
Hallo Kraeusi,
Okay. Nun der nächste Schritt:
Wenn Du für die Images UINT8 brauchst, wird wohl
typecast
der richtige Befehl sein. Ich rate mal, ohne auf Deine Antwort auf den oben gezeigten Code zu warten:
Das könnte aber noch an den Dimensionen scheitern.
Wie hast Du das Bild denn in der Datenbank eingefügt?
Gruß, Jan
|
|
|
Kraeusi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.02.2016, 17:49
Titel:
|
 |
Hallo,
bei
ist das Ergebnis [1 1]
bei
ist das Ergebnis 'int8'
Bei
erhalte ich weiterhin den bereits umgewandelten string, jedoch mit keinen negativen zahlen mehr. Jetzt muss ich wohl wie zuvor den Inhalt wieder zu Hex umwandeln
Als alternative hatte ich jetzt versucht mit
mehr Platz zu schaffen. So konnte ich dann in einer for schleife überprüfen ob ein negativer Wert vorkommt. Wenn ja, habe ich diesen neu mit 256 -den Wert neu berechnen. So kannte ich dann auch den realen Wert wieder mittels Hex-Code herstellen. Aber das war def. nicht die beste Lösung.
Der Spalten typ ist zwar Image, aber es ist kein Bild in der Datenbank. Es handelt sich um einen Hex-Byte String. Ich gehe davon aus, dass der Hersteller der sich das Konzept ausgedacht hatte, bei Text nicht genügt platz hatte und es deshalb als Typ Image speichert. Ändern kann ich das leider nicht
Danke und Gruß,
Tobias
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 17.02.2016, 11:52
Titel:
|
 |
|
 |
|
Hallo Kraeusi,
Zitat: |
Bei
erhalte ich weiterhin den bereits umgewandelten string, jedoch mit keinen negativen zahlen mehr. Jetzt muss ich wohl wie zuvor den Inhalt wieder zu Hex umwandeln :) |
"String" bedeutet CHAR-Vektor. Mit
typecast
erhältst Du einen UINT8-Vektor, der das gleiche Bit-Muster hat wie die Original-Daten. Mit
uint16()
zu casten verändert dagegen die Werte und ich sehe nicht, wozu das nützlich sein soll. Es gibt keinen Grund "mehr Platz" zu schaffen, denn Platzmangel ist ja gar nicht das Problem.
Man braucht keine FOR-Schleife um negative Zahlen zu finden:
Statt
ist eine Umwandlung mit
typecast
genau das, was Du benötigst.
Wieso möchtest Du daraus einen HEX-String machen? Das scheint mir ein überflüssiger Schritt zu sein.
Zitat: |
Der Spalten typ ist zwar Image, aber es ist kein Bild in der Datenbank. Es handelt sich um einen Hex-Byte String. |
Wieso glaubst Du, dass es ein Hex-Byte-String ist? Das halt ich für sehr unwahrscheinlich, denn Hex-codierte Daten belegen nur 4 Bits pro Byte, so dass dann die Hälfte des Speichers verschwendet wäre. Ich denke, dass die Daten als Bytes gespeichert werden, und dank
typecast
spielt es keine Rolle, ob sie INT8 oder UINT8-Format haben.
Images werden üblicherweise binär gespeichert. Man kann z.B. ein JPEG-File auf die Platte schreiben und danach als Byte-Folge in der Datenbank speichern. Die Byte-Folge muss dann hinterher zur Darstellung des Bildes wieder dekodiert werden. Es könnte aber auch ein PNG-Image sein, oder die RGB-Werte als [X,Y,3] matrix als UINT8 oder im DOUBLE-Format. Darum ist es wichtig zu wissen, wie das Bild abgespeichert wurde. Dazu müsstest Du entweder Code haben oder aber eine entsprechende Dokumentation.
Gruß, Jan
|
|
|
Kraeusi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 09.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.02.2016, 10:52
Titel:
|
 |
|
 |
|
Hallo
ich habe endlich die Zeit gefunden, den mittels Typecast rücktransformierten charvektor mit dem original aus der Datenbank zu vergleichen. Es existieren keine Unterschiede, womit ich das Problem dank deiner Hilfe beseitigen konnte
Noch kurz zu deiner Frage, warum ich es im Hex Format benötige. Es sind Daten einer Produktionsanlage, welche im Hexformat auf der Anlage selbst oder in einer Datenbank gespeichert sind. Da ich mittels der FTP Funktion in Matlab (per Filezilla gehts, aber das ist ein anders Thema) nicht an die Daten herankomme, muss ich die Daten aus einer MSSQL Datenbank abfragen.
Ich habe einige Daten in diesem Char-Vektor enthalten welche ich auslesen und weiter verarbeiten möchte. Dabei handelt es sich einerseits um Text, welchen ich mittels einer ASCII Umwandlung erhalte und um bestimmte Zahlen. Diese Zahlen errechne ich mir allerdings über 4 Bytes. Du wirst dich sicherlich Fragen warum ich es so umständlich mache. Der Grund hierfür liegt darin, dass es im Manual des Herstellers so definiert ist. Er speichert die Informationen eben so ab und ich muss mich an seine Struktur halten um an meine Daten heran zu kommen. Es ist defakto kein Bild was in der MSSQL Datenbank gespeichert ist.
Danke noch mal für deine Hilfe
LG
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|