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?


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'

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)

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


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


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;

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


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


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.


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)

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.