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?


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'

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)

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


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


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;

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


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.


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)

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.