Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Vergleichen von strings in der datenbank (https://www.delphipraxis.net/110657-vergleichen-von-strings-der-datenbank.html)

tmrxxoja 21. Mär 2008 20:14

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

mkinzler 21. Mär 2008 20:24

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.

tmrxxoja 21. Mär 2008 20:29

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

mkinzler 21. Mär 2008 20:33

Re: Vergleichen von strings in der datenbank
 
SQL-Code:
SELECT
    ID, erstellt, geaendert
FROM
    PfadBilder
WHERE
    md5 = "DBAFE5B5B9F330C6FEBD92240FDCE288"
ORDER BY
    erstellt asc
LIMIT 1;
Das Erstellungsdatum sollte immer kleiner/gleich der letzten Änderung sein

tmrxxoja 21. Mär 2008 20:39

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

mkinzler 21. Mär 2008 20:40

Re: Vergleichen von strings in der datenbank
 
asc(ending) ist das Gegenteil von desc(ending)

tmrxxoja 21. Mär 2008 20:43

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

mkinzler 21. Mär 2008 20:51

Re: Vergleichen von strings in der datenbank
 
Versuch es mal mit CAST()
BTW. Datumswerte sollte man als DATE speichern.

OG Karotte 21. Mär 2008 22:12

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";

mkinzler 21. Mär 2008 22:14

Re: Vergleichen von strings in der datenbank
 
Sein Problem ist aber, das es Stringsfelder sind.

OG Karotte 21. Mär 2008 22:43

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.

sx2008 21. Mär 2008 22:45

Re: Vergleichen von strings in der datenbank
 
Zitat:

Zitat von tmrxxoja
Problem ist es sind keine datums felder sondern strings

Das ist wirklich DUMM.
Entweder du speicherst die Felder als DATE-Feld oder als Stringfeld in dem Format:
JJJJMMTT (Beispiel: 20080321)
Andernfalls kannst du nicht nach Datum sortieren.

mkinzler 22. Mär 2008 08:43

Re: Vergleichen von strings in der datenbank
 
Laut Referenz kennt SQLite CAST(). Man könnte Testen ob es so funktioniert

tmrxxoja 22. Mär 2008 20:25

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:
    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])))+'")');
nun DB_Inerst will einen String haben
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:
  SQLTimeStampToStr(DateTimeToSQLTimeStamp(GetCreatTime(aListe[n])))
oder sehe ich das falsch

hmm muss ich ja

mkinzler 22. Mär 2008 20:31

Re: Vergleichen von strings in der datenbank
 
Was liefert GetCreateTime()?

tmrxxoja 22. Mär 2008 20:55

Re: Vergleichen von strings in der datenbank
 
TDateTime

mkinzler 22. Mär 2008 21:02

Re: Vergleichen von strings in der datenbank
 
Versuch mal
Delphi-Quellcode:
DateTimeToStr(GetCreatTime(aListe[n]))
Oder (SQL-)Parameter

tmrxxoja 22. Mär 2008 21:13

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

mkinzler 22. Mär 2008 21:17

Re: Vergleichen von strings in der datenbank
 
Der kannst der Konvertierungsfunktion das Format mitgeben.

OG Karotte 22. Mär 2008 21:27

Re: Vergleichen von strings in der datenbank
 
Versuch's doch mal so:

Delphi-Quellcode:
s := FormatDateTime('yyyy-mm-dd', GetCreatTime(aListe[n]));
und dein SQL String:

SQL-Code:
'Insert Into PfadBilder ("PFAD","MD5","erstellt","geaendert") Values ("'+aListe[n]+'","'+MD5DigestToStr(MD5File(aListe[n]))+'","'+  s + '","' + s +'")';
...oder mkinzler's Version mit dem Formatstring

tmrxxoja 22. Mär 2008 21:30

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