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

198

Je veux convertir un timestampMySQL en date.

Je souhaite formater le champ user.registration dans le fichier texte en tant que fichier 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 au résultat avant d'écrire le fichier texte et j'obtiens:

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

email2; nom2; news2

Comment puis-je convertir ce champ à ce jour?

remyremy
la source
Sa sauvegarde le fichier exactement comme ça? Quel est le code que vous utilisez pour exécuter la requête SQL?
seanbreeden
1
J'ai édité ma question, requeteSQL exécute la requête
remyremy

Réponses:

387
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
Yatin
la source
2
Depuis MySQL 5.6.23, je trouve que la valeur de FROM_UNIXTIME () doit être entrée directement: c'est-à-dire, DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii
SELECT * FROM utilisateurs WHERE DATE_FORMAT (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' est ce format correct ou dois-je le modifier?
Dheeraj Thedijje
2
@DheerajThedijje cela apparaît comme 2018-Nov-6. Vous recherchez peut-être '%Y-%m-%d'comme vous le formateriez en PHP (date('Y-m-d',$row->user_created_at))- cela (les deux variantes, SQL et PHP) apparaît comme 2018-11-06
Chris S.
Si vous souhaitez ajouter l'heure de cette façon "hh: mm: ss", ajoutez-la à la chaîne de format '% H:% i:% s'
luis.ap.uyen
65

Convertir l'horodatage en date dans MYSQL

Créez la table avec un horodatage entier:

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

Insérez quelques valeurs

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

Regarde

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

Convertissez 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)
Eric Leschinski
la source
s'il vous plaît fixer% h à% H
Tomot
63

Pour juste avoir une date, tu peux le castfaire

cast(user.registration as date)

et pour obtenir une utilisation de format spécifique date_format

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

Démo SQLFiddle

juergen d
la source
Il donne le même résultat, cast (user.registration as date) est affiché à la place de la valeur du champ
remyremy
5
Cela a bien fonctionné - cast (from_unixtime (user.registration) AS date)
Eric Ness
J'ai un format de date spécifique qui a fonctionné pour moi aussi bien que possible merci
sabre tabatabaee yazdi
utilisez "as DATETIME" pour obtenir les heures minutes et les secondes aussi
Enrique
Je pense que cette réponse est la solution courte et claire. Je préfère ça.
Roman Matveev
20

Si le registrationchamp est effectivement de type, TIMESTAMPvous devriez pouvoir simplement faire:

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

et l'enregistrement doit être affiché sous la forme aaaa-mm-jj

cs0lar
la source
J'ai essayé mais j'obtiens le même résultat: DATE (user.registration) est affiché à la place de la valeur du champ
remyremy
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 pas entendu parler de la fonction requeteSQL, que fait-elle exactement?
cs0lar
Malheureusement, je ne suis pas en mesure d'utiliser directement un client mysql, je n'ai pas mon propre serveur ... J'ai fourni requeteSQL, en gros, il suffit d'exécuter la requête et de tester si une erreur d'envoi d'e-mails ...
remyremy
2
En fait, j'ai réalisé que mon champ était un type BIGINT et non un TIMESTAMP. Seul le contenu était un horodatage (1328649722), c'est pourquoi cela n'a pas fonctionné. Maintenant, tout va bien avec FROM_UNIXTIME!
remyremy
Cela fonctionne bien, je l'ai essayé avec datetime car je n'avais besoin que de la partie date.
ericsicons
11

Utilisez simplement la fonction DATE de mysql:

mysql> select DATE(mytimestamp) from foo;
Morey
la source
6
SELECT DATE(UNIX_TIMESTAMP())crache NULLdans mon MySQL 5.7.14
Xenos
essayez DATE (CURRENT_TIMESTAMP ())
Morey
7

Vous devriez vous convertir timestampen date.

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

FROM_UNIXTIME

Jaydeep Mor
la source
3

FROM_UNIXTIME(unix_timestamp, [format]) c'est tout ce dont tu as besoin

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

FROM_UNIXTIMEobtient une valeur numérique et la transforme en DATEobjet,
ou si une chaîne de format est donnée, elle la renvoie sous forme de chaîne.

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

d.raev
la source
2

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

Par exemple, si vous avez utilisé des guillemets simples en php, il affichera le nom de la variable, pas la valeur

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

Cela ressemble exactement à votre problème et je suis convaincu 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.

Fraser
la source
2

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

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

Essayer:

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

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

Vitaliy A
la source