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?
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
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)
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')
_
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
Il suffit d'utiliser la fonction DATE de mysql:
mysql> select DATE(mytimestamp) from foo;
Vous devriez convertir timestamp
en date
.
select FROM_UNIXTIME(user.registration, '%Y-%m-%d %H:%i:%s') AS 'date_formatted'
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)
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.
Essayer:
SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name
Il formatera l'horodatage en millisecondes en chaîne aaaa-mm-jj.
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.