web-dev-qa-db-fra.com

Convertir l'horodatage en date dans une requête MySQL

Je veux convertir un timestamp dans MySQL en date.

Je voudrais formater le champ user.registration dans le fichier texte en tant que 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 aussi essayé la conversion de date avec:

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

Je répète le résultat avant d'écrire le fichier texte et je reçois:

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

email2; nom2; nouvelles2

Comment puis-je convertir ce champ à la date?

163
remyremy
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
325
Yatin

Convertir l'horodatage en date dans MYSQL

Crée 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 des valeurs

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

jetez un oeil

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

Convertir le nombre en 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)
57
Eric Leschinski

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émo SQLFiddle

54
juergen d

Si le champ registration est bien de type TIMESTAMP, vous devriez pouvoir faire simplement:

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

et l'enregistrement devrait montrer comme aaaa-mm-jj

18
cs0lar

Il suffit d'utiliser la fonction DATE de mysql:

mysql> select DATE(mytimestamp) from foo;
10
Morey

Vous devriez convertir timestamp en date.

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

FROM_UNIXTIME

7
Jaydeep Mor

Je l'ai fait avec la fonction 'date' comme décrit dans ici :

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

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

Par exemple, si vous avez utilisé des guillemets simples dans php, le nom de la variable sera imprimé, pas la 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 vous aide en vous donnant plus d’informations.

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

2
Fraser

Essayer:

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

Il formatera l'horodatage en millisecondes en chaîne aaaa-mm-jj.

1
Vitaliy A

FROM_UNIXTIME(unix_timestamp, [format]) est tout ce dont vous avez besoin

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

FROM_UNIXTIME obtient un nombre et le transforme en un objet DATE,
ou si une chaîne de formatage lui est attribuée, elle la renvoie sous forme de chaîne.

L'ancienne solution consistait à récupérer l'objet de date initial et à le formater avec une deuxième fonction DATE_FORMAT... mais ce n'est plus nécessaire.

0
d.raev