![]() |
Datenbank: SQLite • Version: 2,8 • Zugriff über: Zeoslib
Vergleichen von strings in der datenbank
moin moin
ich habe mal eine frage zu einigen SQL abfragen bezweise habe ich noch einzwei probleme also die abfrage wird gemacht die ergebnisse sind natürlich immer anders ich habe nun zwei spalten mit datum drin sind normale strings ;) nun möchte ich das mir zu der abfrage immer das älsteste datum ausgeben wird ! egal in welcher spalte es steht! wie mache ich das? oder soll ich das lieber in programm vergleichen ?
SQL-Code:
SELECT ID, erstellt, geaendert FROM PfadBilder
WHERE md5 = "DBAFE5B5B9F330C6FEBD92240FDCE288" ID erstellt geaendert 750 08.01.2008 05.01.2008 2396 05.01.2008 05.01.2008 7098 05.01.2008 05.01.2008 7430 05.01.2008 05.01.2008 7899 05.01.2008 05.01.2008 13716 08.01.2008 12.08.2006 20820 05.01.2008 05.01.2008 21152 05.01.2008 05.01.2008 oder SELECT ID, erstellt, geaendert FROM PfadBilder Where md5 = "55F8B2851C1B30FFA2B2A9289FA21DCD" ID erstellt geaendert 5110 05.01.2008 05.01.2008 8040 05.01.2008 05.01.2008 8164 05.01.2008 05.01.2008 8293 05.01.2008 05.01.2008 10175 05.01.2008 05.01.2008 12145 05.01.2008 26.04.2004 17245 08.01.2002 20.10.2007 20338 08.01.2008 30.08.2007 |
Re: Vergleichen von strings in der datenbank
Wenn das DBMS Limitierung versteht kannst du das Ergebnis auf eine Bestimmte Anzahl beschränken. Sonst halt nur Sortieren und den 1. Wert beachten.
|
Re: Vergleichen von strings in der datenbank
hmm ich habe schon versucht mit order by zuarbeiten und dann das zugruppieren
aber das bringt ja nix Problem ist es sind keine datums felder sondern strings |
Re: Vergleichen von strings in der datenbank
SQL-Code:
Das Erstellungsdatum sollte immer kleiner/gleich der letzten Änderung sein
SELECT
ID, erstellt, geaendert FROM PfadBilder WHERE md5 = "DBAFE5B5B9F330C6FEBD92240FDCE288" ORDER BY erstellt asc LIMIT 1; |
Re: Vergleichen von strings in der datenbank
hmm muss mal eben asc ergooglen
aber dummerweise steht nun das älteste datum unten stadt oben und desc geht ja nun nicht mehr weil ja schon der zur zeit mir noch unbekannte parameter asc genommen wird |
Re: Vergleichen von strings in der datenbank
asc(ending) ist das Gegenteil von desc(ending)
|
Re: Vergleichen von strings in der datenbank
danke ich habs schon rausgefunden
bringt mich aber leider nicht zur lösung weil es ja eigentlich datums felder sind die nur dummerweise in normale strings gepackt wurden ich glaube ich muss einfach die felder umändern und dann sollte man auch sortieren können :( sonst sehe ich da keine möglichkeit da ich ja immer das älteste haben muss |
Re: Vergleichen von strings in der datenbank
Versuch es mal mit CAST()
BTW. Datumswerte sollte man als DATE speichern. |
Re: Vergleichen von strings in der datenbank
Wenn ich das richtig verstanden habe suchst Du das ältere zweier Daten:
SQL-Code:
SELECT ID, MIN(MIN(erstellt), MIN(geaendert)) as adatum FROM Pfadbilder WHERE md5 = "DBAFE5B5B9F330C6FEBD92240FDCE288";
|
Re: Vergleichen von strings in der datenbank
Sein Problem ist aber, das es Stringsfelder sind.
|
Re: Vergleichen von strings in der datenbank
SQLite speichert Datumswerte normalerweise als Strings im Format YYYY-MM-DD.
Wenn das befüllen der Datenbank also so stattgefunden hat, dann sollten die Daten auch im korrekten Format vorliegen. Bei einem einfachen SELECT bzw. der Ausgabe per z.B. FieldByName('erstellt').AsString über die ZEOS bekommt er durchaus die Rückgabe im deutschen Datumsformat (gerade getestet). Sind die Daten allerdings im Format DD.MM.YYYY als String gespeichert worden, dann... ...weiß ich im Augenblick auch nicht weiter. |
Re: Vergleichen von strings in der datenbank
Zitat:
Entweder du speicherst die Felder als DATE-Feld oder als Stringfeld in dem Format: JJJJMMTT (Beispiel: 20080321) Andernfalls kannst du nicht nach Datum sortieren. |
Re: Vergleichen von strings in der datenbank
Laut Referenz kennt SQLite CAST(). Man könnte Testen ob es so funktioniert
|
Re: Vergleichen von strings in der datenbank
hmm ich habe mir überlegt das es ja seine richtigkeit haben muss
also habe ich das in der SQLite datenbank die felder in Timestamp geändert nun bekomme ich die daten nicht in die tabelle und zwar mache ich es so
SQL-Code:
nun DB_Inerst will einen String haben
DB_INSERT('Insert Into PfadBilder ("PFAD","MD5","erstellt","geaendert") Values ("'+aListe[n]+'","'+MD5DigestToStr(MD5File(aListe[n]))+'","'+SQLTimeStampToStr(DateTimeToSQLTimeStamp(GetCreatTime(aListe[n])))+'","'+SQLTimeStampToStr(DateTimeToSQLTimeStamp(GetTime(aListe[n])))+'")');
und ich bekomme die Meldung das TimeStamp nit kompatibel mit String ist hmm aber ich sollte durch dieses konstruckt doch einen string oder ?
Delphi-Quellcode:
oder sehe ich das falsch
SQLTimeStampToStr(DateTimeToSQLTimeStamp(GetCreatTime(aListe[n])))
hmm muss ich ja |
Re: Vergleichen von strings in der datenbank
Was liefert GetCreateTime()?
|
Re: Vergleichen von strings in der datenbank
TDateTime
|
Re: Vergleichen von strings in der datenbank
Versuch mal
Delphi-Quellcode:
Oder (SQL-)Parameter
DateTimeToStr(GetCreatTime(aListe[n]))
|
Re: Vergleichen von strings in der datenbank
jap
das hatte ich vorher aber ich muss das ja in SQL format haben so bekomme ich ja 01.05.2002 wieder statt 2002-05-01 und das wollte ich umgehen |
Re: Vergleichen von strings in der datenbank
Der kannst der Konvertierungsfunktion das Format mitgeben.
|
Re: Vergleichen von strings in der datenbank
Versuch's doch mal so:
Delphi-Quellcode:
und dein SQL String:
s := FormatDateTime('yyyy-mm-dd', GetCreatTime(aListe[n]));
SQL-Code:
...oder mkinzler's Version mit dem Formatstring
'Insert Into PfadBilder ("PFAD","MD5","erstellt","geaendert") Values ("'+aListe[n]+'","'+MD5DigestToStr(MD5File(aListe[n]))+'","'+ s + '","' + s +'")';
|
Re: Vergleichen von strings in der datenbank
shit
da habe ich garnicht dran gedacht natürlich hmmmm hatte mir gerade selber was geschrieben aber das geht ja viel schneller danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz