PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formatierungsproblem



wackeldackel
02-02-2004, 19:46
Hallo,

habe ein kleines Problem mit der Formatierung von Text in Datum.
Habe zwei Pulldown Menus (Monat, Jahr). Diese übergeben die gewählten Werte
an eine Abfrage (z.B. 08.2002). Die Spalte hat ein Datumsformat, welches mit date_trunc auf Monat.Jahr beschränkt wurde. ( z.B. 08.2002).

Allerdings bekomme ich die Werte nicht zusammen. :confused:
Weder to_date(); noch date() funktionieren. Ich brauche aber Datumsformat, da hier ein selbst zu bestimmendes Zeitintervall abgefragt werden soll. Habe leider nichts gefunden.

Momentan habe ich nur:

$SQL = " SELECT ...... from .... where rec_redatum between '".$HTTP_POST_VARS['txtMonatVom'].'.'.$HTTP_POST_VARS['txtJahrVom']."' and .....


Der ausgegeben String ist dann sowas wie 08.2002 und das wars. Vielleicht setze ich auch die Funktion falsch ein.

Kann mir da irgendwer helfen.

Danke Klaus

overfly
02-02-2004, 21:35
was für datums werte hast du denn in der Tabelle drin und warum benutzt du die php variable nicht direkt?

wackeldackel
03-02-2004, 04:09
Hallo Overfly,

in der Tabelle habe ich Rechnungsdaten (Rechnungsdatum : 01.02.2002 und umformatiert als 02.2002). Wenn ich mir jetzt die Umsätze von einem bestimmten Zeitraum anschauen möchte, wähle ich aus den Pulldown Menus den entsprechenden Zeitraum aus. ( Monat von: Jahr von: Monat bis: Jahr bis: )

Die Werte setze ich zusammen (wie oben) und bekomme dann halt z.B. 02.2002 und 04.2003. Nachdem ich ca. 10 Jahre in der Datenbank habe, kann ich nicht direkt das Datum als Auswahlmöglichkeit nehmen ( 120 Werte für die Auswahl).

Klaus

Gaert
03-02-2004, 08:49
Hallo Klaus,

am einfachsten arbeitest du immer noch mit dem Unix Timestamp als Datumsformat.
Am besten konvertierst du sämtliche Rechnungsdaten in Timestamps (z.B. mit mktime() ) und fragst diese dann in der Datenbank ab - das funktioniert dann auch mit between, da dieser AFAIK nur numerische Felder korrekt vergleichen kann.
Damit schaffst du dir und deinem Benutzern mehr benutzerfreundlichkeit, da so auch kleinere oder größere Zeitabschnitte als Monatsintervalle abgefragt werden können.

Gruß,

Gaert

wackeldackel
03-02-2004, 14:33
danke für die Antwort,

aber das Problem ist nicht die Datenbank (leider). Dort liegt das Rechnungsdatum im "Date" Format vor. Ich habe nur das Datum zusätzlich in eine weitere Spalte auf Monat.Jahr umkonvertiert, um keine Probleme mit Schaltjahren zu haben. (die Abfrage geht ja von Monat bis Monat und ich müsste dann ja den letzten Tag angeben). Das Problem ist, dass ich die beiden Variablen (Monat, Jahr) aus dem Formular nicht ins Datumsformat bringe.

Gruss Klaus

overfly
03-02-2004, 16:50
dazu mal eine Frage von einem der mal wider ein wenig aus der Materie raus ist
könnte man nciht sagen vom ersten des strat Monats bis zum ersten nach den Ende Monat und den dann wieder Rauskürzen?

wackeldackel
03-02-2004, 18:12
Hallo Overfly,

im Prinzip ja, aber was mach ich am Jahresende:

Monat Start: Januar
Jahr Start: 2002

Monat Ende: Dezember
Jahr Ende: 2003

Die Werte kommen eben aus einem Pulldown Menu:

Monate 1 - 12

und Jahre aktuelles Jahr bis zurück zum Anfang.

Am Jahresende müsste ich Januar wählen, um Dezember zu bekommen, oder wie

Gruss Klaus

overfly
03-02-2004, 19:05
also das mit dem monat müstest du wenn dann per code machen

wackeldackel
03-02-2004, 21:00
Hallo Overfly,

got it, zwar nicht schön, aber doch funktionierend. Nachdem ich eh einen View benötige, Formatiere ich das Rechnungsdatum per to_char(Rechnungsdatum, 'YYYYDD') in was sehr plausibles und leg dann einen to_number(to_char(Rechnungsdatum, 'YYYYDD'),'999999') drüber. Dann kann ich das Teil bei der Ausgabe gleich als Sortierkriterium nehmen. Muss nur testen, ob die Abfrage bei 500.000 Rechnungspostionen momentan nicht ein kleines bisschen langsam wird. :cool:

Gruss Klaus

P.S. wenn jemand was besseres findet, bitte Info.

overfly
03-02-2004, 22:14
das hört sich ja auch gar nciht komerziell an *g*
nicht das du denkst ich will beteiligt werden oder so was
bin viel mehr auf der suche nach einem kleinen Netten Nebenverdinst...

wackeldackel
04-02-2004, 05:50
Morgn Overfly,

ist auch sowas wie kommerziell. Allerdings nicht richtig. Habe mich zu einem Datenbankentwicklerkurs gemeldet und dort gibt es eine Projektwoche. Habe den Bereich Auswertungen bekommen. Tolle Sache :D
Sofern ich jemals richtig durchsteige, könnte ich das auch vielleicht mal versuchen.


gruss Klaus

mehlvogel
04-02-2004, 12:22
Ich an deiner Stelle wuerde es so machen wie Gaert sagte, die Daten alle mit Timestamps speichern, denn damit kann man am Ende eh besser rechnen, es ist einfache zu implementieren und dadruch weniger fehleranfaellig.

wackeldackel
04-02-2004, 18:56
Abend Mehlvogel,

ich glaub wir reden irgendwie aneinander vorbei. Das Problem ist, so glaube ich, nicht das Format in der Datenbank. (dort liegt das Datum im date Format)
Das Problem ist, dass ich ein Datum Monat.Jahr aus zwei Pulldown Menus beziehe und diese doch als Text vorliegen und kein Datum darstellen.

z.B.:

Menu 1 liefert Monatvon: 01
Menu 2 liefert Jahrvon: 1991
Menu 3 liefert Monatbis: 10
Menu 4 liefert Jahrbis: 2002

Das setze ich zusammen: 01.1991 bis 10.2002


Wenn ich also auf mein Rechnungsdatum zugreife und möchte, dass er alle Rechnungen von 08.2001 bis 09.2003 zusammensucht, dann rappelt es, da er das Datum aus der Datenbank nicht dem Suchstring zuordnen kann.
Wenn ich als Rückgabewert aus dem Monatmenu nicht nur das Monat sondern auch den Tag mitgebe, muss ich im Februar entweder hoffen, dass niemand das Schaltjahr sucht oder den 29.02. unter den Tisch fallen lassen, oder mir ne Ausrede einfallen lassen. ;)

Vielleicht liege ich ja auch falsch und es ist völlig egal, wie das Zeug rüberkommt.
Irgendwie check ich da nicht durch.

Gruss Klaus

mehlvogel
05-02-2004, 12:28
Ich hab dein Problem schon verstanden, ich wuerde es blos prinzipiell anders loesen:

Ich wuerde die Daten als UNIX Timestamps in der Datenbank speichern (also als Anzahl der Sekunden vom 1.1.1970) - dann koenntest du ganz einfach aus dem was du aus den Pulldowns kriegst in die Entsprechenden timestamps umrechnen, dies geht mit der Funktion mktime(). Du hast nun einen Timestamp fuer den anfang und einen fuer das ende. Dann kannst du ganz einfache ein select mit



... WHERE datum>'".$anfang_timestamp."' AND datum<'".$ende_timestamp."'


Wenn Datum jetzt vom typ INT ist, findet er automatisch alles was dazwischen liegt. Die Sache mit dem Schaltjahr ist dann kein Problem mehr - nur halt die Erstellung des Pulldowns bzw die Validierung der Eingabe Daten.

wackeldackel
05-02-2004, 15:52
Hallo Mehlvogel,

ich nix klug und erst nix verstehen, sorry.
(war darin auch schon mal besser)


Werde ich probieren. Vielleicht semmelt dann die Abfrage auch etwas schneller durch.





Gruss Klaus