257 votes

Conversion de l'horodatage en date dans une requête MySQL

Je veux convertir un timestamp dans MySQL à une date.

Je voudrais formater le champ user.registration dans le fichier texte comme un yyyy-mm-dd .

Voici mon SQL :

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

J'ai également essayé la conversion de date avec :

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

Je fais écho du résultat avant d'écrire le fichier texte et j'obtiens :

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

email2;nom2;nouvelles2

Comment puis-je convertir ce champ en date ?

0 votes

Il enregistre le fichier exactement comme ça ? Quel est le code que vous utilisez pour exécuter la requête sql ?

1 votes

J'ai modifié ma question, requeteSQL exécute la requête

470voto

Yatin Points 481
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'

3 votes

Depuis MySQL 5.6.23, je constate que la valeur de FROM_UNIXTIME() doit être saisie directement : c'est-à-dire DATE_FORMAT(FROM_UNIXTIME(user.registration), '%e %b %Y') AS 'date_formatted'.

2 votes

SELECT * FROM users WHERE DATE_FORMAT(FROM_UNIXTIME( users . user_created_at ),'%Y-%b-%e') = '2015-03-06'. Ce format est-il correct ou dois-je le modifier ?

3 votes

@DheerajThedijje ce qui apparaît comme 2018-Nov-6. Vous recherchez peut-être '%Y-%m-%d' comme vous le feriez en PHP (date('Y-m-d',$row->user_created_at)) - ceci (les deux variantes, SQL et PHP) s'affiche comme 2018-11-06

90voto

juergen d Points 85039

Pour obtenir une date, vous pouvez cast il

cast(user.registration as date)

et pour obtenir un format spécifique, utilisez date_format

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

Démonstration de SQLFiddle

1 votes

Il donne le même résultat, cast(user.registration as date) est affiché au lieu de la valeur du champ

6 votes

Cela a pourtant fonctionné - cast(from_unixtime(user.registration) AS date)

0 votes

J'ai un format de date spécifique qui a fonctionné pour moi aussi bien que possible merci

77voto

Eric Leschinski Points 14289

Convertir l'horodatage en date dans MYSQL

Créez la table avec un timestamp entier :

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

Insérer quelques valeurs

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

Jetez un coup d'œil

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

Convertir le nombre en un horodatage :

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)

Convertissez-le dans un format lisible :

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)

0 votes

Veuillez fixer %h à %H

22voto

cs0lar Points 97

Si le registration est bien de type TIMESTAMP vous devriez être capable de le faire :

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

et l'enregistrement doit apparaître sous la forme aaaa-mm-jj.

0 votes

J'ai essayé mais j'obtiens le même résultat : DATE(user.registration) est affiché au lieu de la valeur du champ

0 votes

Comme quelqu'un l'a suggéré, pouvez-vous exécuter la requête avec succès en utilisant directement le client mysql ? Je n'ai jamais entendu parler de la fonction requeteSQL, que fait-elle exactement ?

0 votes

Malheureusement, je ne suis pas en mesure d'utiliser un client mysql directement, je n'ai pas mon propre serveur... J'ai fourni requeteSQL, en gros, il ne fait qu'exécuter la requête et tester si l'erreur est d'envoyer des emails...

3voto

Fraser Points 6783

Si vous obtenez la requête dans votre sortie, vous devez nous montrer le code qui échappe réellement le résultat. Pouvez-vous afficher le code qui appelle requeteSQL ?

Par exemple, si vous avez utilisé des guillemets simples en php, il imprimera le nom de la variable et non sa valeur.

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

Cela ressemble exactement à votre problème et je suis certain que c'est la cause.

Essayez également de supprimer le symbole @ pour voir si cela peut vous aider en vous donnant plus d'informations.

de sorte que

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

devient

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

Cela arrêtera toute suppression d'erreur si la requête génère une erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X