Aqua: && (MySQL) -> Eine verwirrende Frage mit der ZEIT-Verarbeitung

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.

Die Frage

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

  1. 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

    1. 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

      1. Hi Daniela...

        print join('-', split(//{4}, '20031128031648'));

        1. Das geht ned
        2. Ich muss ja sagen dass es nach den ersten 4 Zeichen
             nur mehr 2 holen soll ?

        (Hilfe *g*)

        Danke,
        Aqua

        1. Hallo Aqua,

          print join('-', split(//{4}, '20031128031648'));

          1. Das geht ned

          Das will ich hoffen.

          1. 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

          --
          Das Leben ist wie ein Kartenspiel: was dir gegeben wurde, ist vorbestimmt. Doch wie du damit spielst, ist deine Entscheidung.
          1. Hallo Christian!

            Danke, das war einfacher als ich dachte!
            Danke!

            LG
            Aqua

    2. 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

  2. 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

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. 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