Vortag
Nugorra
- datenbank
0 Frank (no reg)0 Nugorra0 Siechfred0 Nick0 nugorra0 Vinzenz Mai0 Nugorra0 Vinzenz Mai0 Nugorra
0 Vinzenz Mai
1 wahsaga0 King^Lully0 wahsaga
Hallo!
Mein Problem:
Ich würde gerne Daten vom Vortag rausfiltern,
hab aber das Datum nur in einer Spalte varchar(25).
Kann ich das irgendwie trotzdem umsetzen ?
(PHP Lösung wäre auch OK nur das varchar(25)kann ich nicht ändern)
Danke im Vorraus
Hallo,
es gibt in vielen Datenbanksystemen Funktionen um z.b. Zeichenketten in Datumswerte und vice versa zu konvertieren. Danach kannst du weitere Datumsfunktionen anwenden zum Differenzen berechnen (manchmal heisst das DateDiff o.ä.).
Beschäftige dich bitte mit dem Handbuch (in welcher Form auch immer) deines Datenbanksystems, welche Funktionen es für Datumswerte bereitstellt.
Grüsse
Frank
Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
aber DateDiff braucht YYYY-MM-DD.
Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
aber DateDiff braucht YYYY-MM-DD.
MySQL kennt u.a. DATE_FORMAT (http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html), evtl. bietet dein uns bis dato unbekanntes DBMS etwas Ähnliches.
Siechfred
Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
aber DateDiff braucht YYYY-MM-DD.MySQL kennt u.a. DATE_FORMAT (http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html), evtl. bietet dein uns bis dato unbekanntes DBMS etwas Ähnliches.
Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.
Nick
Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.
Werd wohl den PHP weg nehmen, ( hab jetzt die aktuelle version einer der Tabellen bekommen und seh jetzt das das Format DD-(z.B.May)-YYYY HH:MM:SS ist ) .
Hallo
Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.
Werd wohl den PHP weg nehmen, ( hab jetzt die aktuelle version einer der Tabellen bekommen und seh jetzt das das Format DD-(z.B.May)-YYYY HH:MM:SS ist ) .
Das stellt immer noch kein Problem dar. Welches Datenbankmanagementsystem (DBMS) nutzt Du?
[ ] Access
[ ] DB2
[ ] dBASE
[ ] Filemaker
[ ] FoxPro
[ ] Informix
[ ] MS SQL-Server
[ ] MySQL
[ ] Oracle
[ ] Paradox
[ ] PostgreSQL
[ ] SQLite
[ ] ein anderes, und zwar ____________________________
Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
das für Dich erledigen. Grundsätzlich solltest Du allerdings daran denken,
diesen Zustand zu ändern - und die Datums-/Zeitangaben in einem Feld mit
angemessenen Datentyp zu speichern.
Freundliche Grüße
Vinzenz
Datenbankmanagementsystem (DBMS) nutzt Du?
[ ] Access
[ ] DB2
[ ] dBASE
[ ] Filemaker
[ ] FoxPro
[ ] Informix
[ ] MS SQL-Server
[X] MySQL
[ ] Oracle
[ ] Paradox
[ ] PostgreSQL
[ ] SQLite
[ ] ein anderes, und zwar ____________________________Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
das für Dich erledigen. Grundsätzlich solltest Du allerdings daran denken,
diesen Zustand zu ändern - und die Datums-/Zeitangaben in einem Feld mit
angemessenen Datentyp zu speichern.Freundliche Grüße
Vinzenz
Wenn es den gehen würde, ^^ ist ne Vorgabe die ich leider nicht ändern darf.
Wäre aber nett wenn mir da mal wer helfen würde,
da ich in SQL nicht so gut bin.
MFG
Hallo,
Datenbankmanagementsystem (DBMS) nutzt Du?
[X] MySQL
Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
das für Dich erledigen.
dem ist so (MySQL 4.1.1 oder neuer ...)
STR_TO_DATE in Verbindung mit dem geeigneten Format. Die Formate findest Du
bei DATE_FORMAT, was Dir ja bereits gesagt wurde. Soweit ich das sehe, sollte
das kein Problem sein.
Für den Monat nimmst Du entweder %b oder %M. Leider ist der aktuelle Monat der
einzige Monat im Jahr, für den diese beiden die gleiche Ausgabe liefern :-)
Nach dem Umwandeln kannst Du bequem mit DATE_SUB() den Vortag ermitteln,
danach mit DATE_FORMAT die gewünschte Ausgabe erzeugen:
Beispiel: '12-January-2007 14:08:03'
Daraus folgt für den Format-String: '%d-%M-%Y %H:%i%s'
SELECT
STR_TO_DATE(
'12-January-2007 14:08:03', -- deine Datumszeichenkette
'%d-%M-%Y %H:%i:%s' -- das passende Format
)
wandelt die Zeichenkette in einen Datumswert um.
SELECT -- Vortag:
DATE_SUB( -- Subtrahiere vom
STR_TO_DATE( -- in einen Datumswert
'12-January-2007 14:08:03', -- umgewandelte String
'%d-%M-%Y %H:%i:%s'
),
INTERVAL 1 DAY -- einen Tag
)
liefert nun den Vortag und mit DATE_FORMAT kannst Du diesen Tab nach
Belieben formatiert ausgeben, beispielsweise im gleichen Format wie
die Ausgangsdaten:
SELECT
DATE_FORMAT( -- Formatiere
DATE_SUB( -- den Vortag
STR_TO_DATE(
'12-January-2007 14:08:03',
'%d-%M-%Y %H:%i:%s'
),
INTERVAL 1 DAY
),
'%d-%M-%Y %H:%i:%s' -- wie benötigt
)
Wenn es den gehen würde, ^^ ist ne Vorgabe die ich leider nicht ändern darf.
Das ist eine untaugliche Vorgabe! Wer diese gemacht hat, hat von Datenbanken
keine Ahnung oder nur gefährliches Halbwissen.
Freundliche Grüße
Vinzenz
Hi Danke für die Antwort!!!
Hierzu:
Das ist eine untaugliche Vorgabe! Wer diese gemacht hat, hat von Datenbanken
keine Ahnung oder nur gefährliches Halbwissen.
Das ist ne Ausgabe einer Maschine, die eigentlich alle Berichte Drucken sollte.
Wurde irgendwann gesagt, ist uns zu teuer das Papier,
Jetzt stellen wir doch mal auf DB um,
deshalb ist das Format leider gegeben.
Hallo,
Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
aber DateDiff braucht YYYY-MM-DD.
bietet Dein Datenbankmanagementsystem keine Zeichenkettenfunktionen?
In Transact-SQL, dem SQL-Dialekt des MS-SQL-Servers kannst Du z.B. mit
SELECT
SUBSTRING('29-05-2006', 7, 4)
+ '-' + SUBSTRING('29-05-2006', 4, 2)
+ '-' + SUBSTRING('29-05-2006', 1, 2)
Deine Zeichenkette so umformatieren, dass aus DD-MM-YYYY YYYY-MM-DD wird.
Das geht mit den Zeichenkettenfunktionen Deines Datenbankmanagementsystems
(DBMS) ganz sicher auch.
Freundliche Grüße
Vinzenz
hi,
hab aber das Datum nur in einer Spalte varchar(25).
Kann ich das irgendwie trotzdem umsetzen ?
(PHP Lösung wäre auch OK nur das varchar(25)kann ich nicht ändern)
Wer sagt, dass du das nicht ändern "kannst"?
Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.
gruß,
wahsaga
Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.
Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?
hi,
Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.
Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?
Weil T-Systems beteiligt war ...?
gruß,
wahsaga
Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.
Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?
Weil T-Systems beteiligt war ...?
LOL - weitere Vorschläge?