Datum umformatieren in MSQL

  • Hallo,

    ich habe leider keine Ahnung von MSQL und nur wenig von PHP. Ich richtig weiß ich auch nicht wonach ich suchen muss. Daher bitte ich um Verzeihung falls die Antwort schon gepostet wurde. Jedenfalls möchte ich gerne für meine Beiträge (News), welche ich im CMS-System erstellt habe das Erstellungsdatum in die neue Datenbank übernehmen. Leider ist die Datumanzeige falsch. Ich weiß auch nicht, wie ich ich die im alten System (php fusion) um wandeln kann. Daher würde ich das am besten direkt in MySQL machen.

    Zur Zeit sieht das wie folgt aus:

    Bitte könnt Ihr mir das kleinschrittig erklären, was ich in php Admin machen muss, um das entsprechende Datum umgewandelt bzw. neu erstellt bekomme? Das wäre eine sehr große Hilfe für mich.

    Mit besten Grüßen
    Magnus

  • Naja, in deiner Datenbank sind die Daten ja scheinbar als Unix-Timestamp gespeichert, d.H. du kannst sie in php eigentlich in jedes beliebige Format bringen, dazu gibt es Funktionen wie date().

    Wenn du es aber unbedingt in MySQL lösen willst, ist die MySQL-Funktion FROM_UNIXTIME was du suchst.

    Codebeispiel FROM_UNIXTIME

    SQL
    SELECT
        FROM_UNIXTIME(news_datestamp, '%Y-%M-%D') AS datum_formatiert
    FROM
        tabellenname
    
    
    --------------------------
    --- Resultat: YYYY-MM-DD
    --------------------------
  • Naja, in deiner Datenbank sind die Daten ja scheinbar als Unix-Timestamp gespeichert, d.H. du kannst sie in php eigentlich in jedes beliebige Format bringen, dazu gibt es Funktionen wie date().

    Wenn du es aber unbedingt in MySQL lösen willst, ist die MySQL-Funktion FROM_UNIXTIME was du suchst.

    Codebeispiel FROM_UNIXTIME

    SQL
    SELECT
        FROM_UNIXTIME(news_datestamp, '%Y-%M-%D') AS datum_formatiert
    FROM
        tabellenname
    
    
    --------------------------
    --- Resultat: YYYY-MM-DD
    --------------------------

    Danke für die schnelle Rückmeldung. Auch wenn ich keine Ahnung habe, habe ich es mal versucht. Nur so bin ich bisher voran gekommen.
    Das ganze in SQL eingefügt und angepasst. Aber muss ich nicht noch ne neue Spalte irgendwie erstellen, welche ich dann auslesen kann? Zur Zeit kommt da folgende Fehlermeldung: "Diese Tabelle enthält keine eindeutige ("unique") Spalte. Gitter-Bearbeitungsfunktion, Kontrollkästchen, Bearbeiten, Kopieren und Löschen von Links sind nicht verfügbar."
    Dennoch zeigt er mir die entsprechende Daten an und ich muss sie halt noch überführen wa?

    LG

  • Hmm, in der alten Datenbank steht es als Timestamp drin, aber wie soll es in der neuen Datenbank stehen? Als date_time? Wenn ja, dann eine Spalte mit x-beliebigen Namen mit dem Typ date_time anlegen und dann ein

    update tabelle set xSpalte=FROM_UNIXTIME(news_datestamp);

    Danach die Spalte news_datestamp erst mal umbenennen und die xSpalte umbenennen auf news_datestamp

  • Bitte kannst Du das als Ganze Formel wie oben darstellen, sonst bin ich überfordert. ;)
    Die Übertragung ist easy. Ich muss halt nur die Spalte angeben und diese sollte halt richtig formatiert sein. Wie sie heißt ist nebensächlich. :)

  • Ah, da hab ich offensichtlich etwas falsch verstanden. Du möchtest die daten permanent in der Datenbank ändern, nicht nur für die Darstellung formatieren? Das lässt sich auch machen, ist aber etwas komplizierter. Wenn es das ist, was du machen willst, kann ich dir den entsprechenden SQL-Code schreiben.

  • Genau permanent. Am besten jedoch in eine neue Spalte. Weil ich weiß nicht, ob meine jetztiges CMS System (welches noch läuft) die Daten irgendwie benötigt. Daher einfach ne neue Spalte ("Datestamp_neu" oder so). Finds echt klasse, dass Ihr mir helft!

  • Code
    ALTER TABLE tabellenname
        ADD date_form VARCHAR(20) NULL;
    
    UPDATE tabellenname
        SET date_form = FROM_UNIXTIME(news_datestamp, '%Y-%M-%D');

    Musst natürlich Tabellennamen und Datumsformat noch so anpassen, dass es dir passt. Die Lösung ist ungetestet und ehrlich gesagt nicht besonders sinnvoll, aber sie entspricht in etwa dem was du brauchst.

    Wenn du aber mit dem alten Script neue Daten in das Feld einträgst wird die neue Spalte nicht automatisch befüllt, die Lösung mact also wirklich nur Sinn, wenn die alte Tabellenspalte nicht mehr verwendet wird.

    2 Mal editiert, zuletzt von lukasn (18. November 2013 um 15:45) aus folgendem Grund: Code korrigiert.

  • Das bezieht sich hierauf, wo der Name vergeben wird.

    Code
    ALTER TABLE tabellenname     ADD date_form VARCHAR(20) NULL;


    Die Spalte mit dem Namen existiert schon.
    Du musst dann halt einen anderen Namen wählen: