&& (MySQL) -> Eine verwirrende Frage mit der ZEIT-Verarbeitung
Aqua
- perl
0 Daniela Koller0 Daniela Koller0 Aqua0 Christian Kruse0 Aqua
0 Aqua
0 Sven Rautenberg
Hallo!
Das Feld "zeit" ist der Feld-Type "timestamp"
Das Format ist offensichtlich ein anderes als der Timestamp
den wir von Linux her kennen, wenn man in Perl time() ausgibt,
da sind ja die Sekunden seit 1.1.1970
Jedenfalls finde ich es nett in der MySQL-DB eine Spalte zu haben in
der ein für MySQL verstaendliches Datum ist mit dem MySQL selbst
rechnen kann anstatt ein INT feld mit einem Unix-Timestamp.
Daher entschied ich mich für den Feld-Type timestamp.
Angeblich gibt es irgendeine Möglichkeit,
den Unix Timestamp direkt einzufügen,
also ohne die Unix-Zeit zu veraendern diese direkt in
die DB einzufügen und MySQL speichert das in der Tabelle aber in
der Form wie es unten zu sehen ist als Jahr,Monat,Tag,Stunde,Minute,Sekunde
Wie geht das?
Und wie bekomme ich den Wert am leichtesten zu verarbeiten wieder
aus der Datenbank raus?
Kann ich das auch als Unix Timestamp wieder herausbekommen?
Zusatzfrage:
Welche Regexp trennt mir 20031128031648 so ab:
die ersten 4 zeichen, und alle anderen in 2-er schritten,
das ganze setze ich dann in () damit ich $1 und $2 usw... variablen
bekomme....
hm...
+----+-------+----------------+
| id | titel | zeit |
+----+-------+----------------+
| 1 | ssss | 20031128031648 |
| 6 | xxx | 20031128121422 |
+----+-------+----------------+
Danke,
Aqua
Hi Aqua
Angeblich gibt es irgendeine Möglichkeit,
den Unix Timestamp direkt einzufügen,
also ohne die Unix-Zeit zu veraendern diese direkt in
die DB einzufügen und MySQL speichert das in der Tabelle
[..]
Kann ich das auch als Unix Timestamp wieder herausbekommen?
Lesen bildet:
http://www.mysql.com/doc/en/Date_and_time_functions.html
Deine Freunde sind UNIX_TIMESTAMP und FROM_UNIXTIME.
Was Regexpen angeht, dir sind die absoluten Perl-Regexp-Basics mit (.[4]) resp (.[2]) schon ein Begriff?
Gruss Daniela
Hi Aqua
Was Regexpen angeht, dir sind die absoluten Perl-Regexp-Basics mit (.[4]) resp (.[2]) schon ein Begriff?
Ich meine natürlich (.{4}) und (.{2}).
Gruss Daniela
Hi Daniela...
print join('-', split(//{4}, '20031128031648'));
(Hilfe *g*)
Danke,
Aqua
Hallo Aqua,
print join('-', split(//{4}, '20031128031648'));
- Das geht ned
Das will ich hoffen.
- Ich muss ja sagen dass es nach den ersten 4
Zeichen nur mehr 2 holen soll ?
Ists so schwer, in der Doku nachzulesen?
$, = '-';
print '20031128031648' =~ /(\d{4})(\d{2})(\d{2})(\d{4})/;
Gruesse,
CK
Hallo Christian!
Danke, das war einfacher als ich dachte!
Danke!
LG
Aqua
Hallo Daniela
http://www.mysql.com/doc/en/Date_and_time_functions.html
Deine Freunde sind UNIX_TIMESTAMP und FROM_UNIXTIME.
Ist ja coool dass MySQL sowas kann!!
Danke, danke, danke!! =)
LG
Aqua
Moin!
Das Feld "zeit" ist der Feld-Type "timestamp"
Das Format ist offensichtlich ein anderes als der Timestamp
den wir von Linux her kennen, wenn man in Perl time() ausgibt,
da sind ja die Sekunden seit 1.1.1970
Ich glaube, du willst keine TIMESTAMP verwenden. TIMESTAMP ist ein besonderes Feld. Jede Aktualisierung des Datensatzes, welche TIMESTAMP nicht explizit auf einen Wert setzt, oder TIMESTAMP auf NULL setzt, hat zur Folge, dass TIMESTAMP auf die aktuelle Zeit gesetzt wird.
Mit anderen Worten: Ein unachtsames UPDATE eines einzigen Wertes des Datensatzes verändert auch die TIMESTAMP.
Wenn du Datum+Uhrzeit haben willst, verwende DATETIME als Typ.
Angeblich gibt es irgendeine Möglichkeit,
den Unix Timestamp direkt einzufügen,
Das hat man dir schon gesagt...
Und wie bekomme ich den Wert am leichtesten zu verarbeiten wieder
aus der Datenbank raus?
Indem du passende Datumsfunktionen auf das Ergebnis anwendest.
Kann ich das auch als Unix Timestamp wieder herausbekommen?
Wurde schon mit JA beantwortet.
Zusatzfrage:
Welche Regexp trennt mir 20031128031648 so ab:
die ersten 4 zeichen, und alle anderen in 2-er schritten,
das ganze setze ich dann in () damit ich $1 und $2 usw... variablen
bekomme....
Wenn du sowas brauchst, verwendest du die Datenbank falsch.
SELECT DAYOFMONTH(zeit) as tag, MONTH(zeit) as monat, YEAR(zeit) as jahr, HOUR(zeit) as stunde, MINUTE(zeit) as minute, SECOND(zeit) as sekunde FROM tabelle;
Damit kriegst du, fein säuberlich in Felder getrennt, Tag, Monat, Jahr und Uhrzeit (wenn's sein muß, die auch noch getrennt nach Stunde, Minute und Sekunde), das im Feld zeit gespeicherte Datum.
Wenn du mit den Feldern aber nicht weiterrechnen willst, sondern einfach ein schön formatiertes Datum willst:
SELECT DATE_FORMAT(zeit,"%e.%c.%Y, %k:%i") FROM tabelle;
Das liefert dir einen schönen String: "2.9.2003, 3:27" oder "14.11.1874, 21:06".
http://www.mysql.de/doc/de/Date_and_time_functions.html
Die Datumsfunktionen sind wirklich beachtenswert.
- Sven Rautenberg
Hallo Sven!
Also Du übertriffst natürlich wie gewöhnlich wieder mal
alle meiner erwartungen =))
Das ist echt toll und hilft mir unglaublich weiter!
Vielen lieben Dank!
Aqua