Konvertieren Sie den Zeitstempel in der MySQL-Abfrage auf das Datum

187

Ich möchte ein timestampin MySQL in ein Datum konvertieren .

Ich möchte das Feld user.registration in die Textdatei als formatieren yyyy-mm-dd.

Hier ist mein SQL:

$sql = requestSQL("SELECT user.email, 
                   info.name, 
                   FROM_UNIXTIME(user.registration),
                   info.news
                   FROM user, info 
                   WHERE user.id = info.id ", "export members");

Ich habe auch versucht, die Datumskonvertierung mit:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)

Ich habe das Ergebnis vorher wiederholt, um die Textdatei zu schreiben, und ich bekomme:

email1; name1; DATE_FORMAT (user.registration, '% d /% m /% Y'); news1

email2; name2; news2

Wie kann ich dieses Feld auf das Datum konvertieren?

Remyremie
quelle
Es speichert die Datei genau so? Mit welchem ​​Code führen Sie die SQL-Abfrage aus?
Seanbreeden
1
Ich habe meine Frage bearbeitet, RequeteSQL führt die Abfrage aus
Remyremy

Antworten:

371
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
Yatin
quelle
2
Ab MySQL 5.6.23 sollte der Wert für FROM_UNIXTIME () direkt eingegeben werden: dh DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii
SELECT * FROM users WHERE DATE_FORMAT (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' ist das richtige Format oder sollte ich dies ändern?
Dheeraj Thedijje
2
@DheerajThedijje dies zeigt sich als 2018-Nov-6. Möglicherweise suchen '%Y-%m-%d'Sie, wie Sie es in PHP formatieren würden (date('Y-m-d',$row->user_created_at))- dies (beide Varianten, SQL und PHP) wird als 2018-11-06
Chris S.
Wenn Sie die Zeit auf diese Weise "hh: mm: ss" hinzufügen möchten, fügen Sie diese der
Formatzeichenfolge
63

Konvertieren Sie den Zeitstempel in MYSQL auf das Datum

Erstellen Sie die Tabelle mit einem ganzzahligen Zeitstempel:

mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)

Fügen Sie einige Werte ein

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)

Schau mal

mysql> select * from foo;
+------+-------------+
| id   | mytimestamp |
+------+-------------+
|    1 |  1381262848 |
+------+-------------+
1 row in set (0.00 sec)

Konvertieren Sie die Nummer in einen Zeitstempel:

mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id   | from_unixtime(mytimestamp) |
+------+----------------------------+
|    1 | 2013-10-08 16:07:28        |
+------+----------------------------+
1 row in set (0.00 sec)

Konvertieren Sie es in ein lesbares Format:

mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id   | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
|    1 | 2013 8th October 04:07:28                       |
+------+-------------------------------------------------+
1 row in set (0.00 sec)
Eric Leschinski
quelle
Bitte fixieren Sie% h auf% H
Tomot
61

Um nur ein Date zu bekommen, kannst du castes

cast(user.registration as date)

und um ein bestimmtes Format zu erhalten date_format

date_format(registration, '%Y-%m-%d')

SQLFiddle-Demo

Jürgen d
quelle
Es gibt das gleiche Ergebnis, Besetzung (user.registration als Datum) wird anstelle des Wertes des Feldes angezeigt
Remyremy
5
Dies funktionierte jedoch - Besetzung (from_unixtime (user.registration) AS Datum)
Eric Ness
Ich habe ein bestimmtes Datumsformat, das für mich so gut wie möglich
funktioniert hat
Verwenden Sie "als DATETIME", um auch Stunden, Minuten und Sekunden zu erhalten
Enrique
Ich denke, dass diese Antwort die kurze und klare Lösung ist. Ich bevorzuge das.
Roman Matveev
18

Wenn das registrationFeld tatsächlich vom Typ ist TIMESTAMP, sollten Sie in der Lage sein, Folgendes zu tun:

$sql = "SELECT user.email, 
           info.name, 
           DATE(user.registration), 
           info.news
      FROM user, 
           info 
     WHERE user.id = info.id ";

und die Registrierung sollte als JJJJ-MM-TT angezeigt werden

cs0lar
quelle
Ich habe es versucht, aber ich erhalte das gleiche Ergebnis: DATE (user.registration) wird anstelle des Wertes des Feldes
angezeigt
Können Sie die Abfrage, wie von jemandem vorgeschlagen, erfolgreich direkt mit dem MySQL-Client ausführen? Ich habe noch nichts von der RequeteSQL-Funktion gehört. Was genau macht sie?
cs0lar
Leider kann ich einen MySQL-Client nicht direkt verwenden, ich habe keinen eigenen Server ... Ich habe RequeteSQL bereitgestellt, im Grunde führt es nur die Abfrage aus und testet, ob Fehler beim Senden von E-Mails
vorliegen
2
Eigentlich wurde mir klar, dass mein Feld ein BIGINT-Typ und kein TIMESTAMP war. Nur der Inhalt war ein Zeitstempel (1328649722), deshalb hat es nicht funktioniert. Jetzt ist alles gut mit FROM_UNIXTIME!
Remyremie
Dies funktioniert gut Ich habe es mit datetime versucht, da ich nur den Datumsanteil erhalten musste.
Ericics
10

Verwenden Sie einfach die DATE-Funktion von mysql:

mysql> select DATE(mytimestamp) from foo;
Morey
quelle
5
SELECT DATE(UNIX_TIMESTAMP())spuckt NULLin mein MySQL 5.7.14
Xenos
versuchen Sie DATE (CURRENT_TIMESTAMP ())
Morey
7

Sie sollten konvertieren timestampzu date.

select FROM_UNIXTIME(user.registration, '%Y-%m-%d %H:%i:%s') AS 'date_formatted'

FROM_UNIXTIME

Jaydeep Mor
quelle
2

Wenn Sie die Abfrage in Ihrer Ausgabe erhalten, müssen Sie uns den Code anzeigen, der das Ergebnis tatsächlich wiedergibt. Können Sie den Code veröffentlichen, der RequeteSQL aufruft?

Wenn Sie beispielsweise einfache Anführungszeichen in PHP verwendet haben, wird der Variablenname und nicht der Wert gedruckt

echo 'foo is $foo'; // foo is $foo

Das klingt genau nach Ihrem Problem und ich bin mir sicher, dass dies die Ursache ist.

Entfernen Sie auch das @ -Symbol, um festzustellen, ob dies hilfreich ist, indem Sie mehr Informationen erhalten.

damit

$SQL_result = @mysql_query($SQL_requete); // run the query

wird

  $SQL_result = mysql_query($SQL_requete); // run the query

Dadurch wird jede Fehlerunterdrückung gestoppt, wenn die Abfrage einen Fehler auslöst.

Fraser
quelle
2

Ich habe es mit der ‚Datum‘ Funktion wie beschrieben hier :

(SELECT count(*) as the-counts,(date(timestamp)) as the-timestamps FROM `user_data` WHERE 1 group BY the-timestamps)
Emanuel Graf
quelle
2

FROM_UNIXTIME(unix_timestamp, [format]) ist alles, was du brauchst

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'

FROM_UNIXTIMERuft einen Zahlenwert ab und wandelt ihn in ein DATEObjekt um.
Wenn eine Formatzeichenfolge angegeben wird, wird diese als Zeichenfolge zurückgegeben.

Die ältere Lösung bestand darin, das ursprüngliche Datumsobjekt abzurufen und mit einer zweiten Funktion zu formatieren DATE_FORMAT... dies ist jedoch nicht mehr erforderlich

d.raev
quelle
1

Versuchen:

SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name

Der Zeitstempel wird in Millisekunden in einen JJJJ-MM-TT-String formatiert.

Vitaliy A.
quelle