Je ne sais pas vraiment par où commencer avec celui-ci. Quelqu'un peut-il m'aider/m'indiquer dans la bonne direction?.
J'ai une colonne d'horodatage dans MySQL et je souhaite sélectionner une plage de dates, par exemple, tous les horodatages datant d'octobre 2010.
Merci.
Habituellement ce serait ceci:
SELECT *
FROM yourtable
WHERE yourtimetimefield>='2010-10-01'
AND yourtimetimefield< '2010-11-01'
Mais comme vous avez un timestamp unix, vous aurez besoin de quelque chose comme ça:
SELECT *
FROM yourtable
WHERE yourtimetimefield>=unix_timestamp('2010-10-01')
AND yourtimetimefield< unix_timestamp('2010-11-01')
Une méthode compacte et flexible pour les horodatages sans fraction de seconde serait:
SELECT * FROM table_name
WHERE field_name
BETWEEN UNIX_TIMESTAMP('2010-10-01') AND UNIX_TIMESTAMP('2010-10-31 23:59:59')
Si vous utilisez des fractions de secondes et une version récente de MySQL, mieux vaut utiliser les opérateurs >=
et <
conformément à la réponse de Wouter .
Voici un exemple de champs temporels définis avec une précision seconde seconde (précision maximale utilisée):
mysql> create table time_info (t_time time(6), t_datetime datetime(6), t_timestamp timestamp(6), t_short timestamp null);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into time_info set t_time = curtime(6), t_datetime = now(6), t_short = t_datetime;
Query OK, 1 row affected (0.01 sec)
mysql> select * from time_info;
+-----------------+----------------------------+----------------------------+---------------------+
| 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34 |
+-----------------+----------------------------+----------------------------+---------------------+
1 row in set (0.00 sec)
SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'
Je peux voir des gens faire beaucoup de commentaires sur cette question. Mais je pense que la simple utilisation de LIKE
pourrait être plus facile d’obtenir les données de la table.
SELECT * FROM table WHERE COLUMN LIKE '2013-05-11%'
Utilisez LIKE
et publiez une recherche de caractères génériques. Espérons que cela résoudra votre problème.
Cette requête SQL va extraire les données pour vous. C'est facile et rapide.
SELECT *
FROM table_name
WHERE extract( YEAR_MONTH from timestamp)="201010";
Dans la mesure du possible, évitez d'appliquer des fonctions à une colonne de la clause where:
SELECT *
FROM table_name
WHERE timestamp >= UNIX_TIMESTAMP('2010-10-01 00:00:00')
AND timestamp < UNIX_TIMESTAMP('2010-11-01 00:00:00');
L'application d'une fonction à la colonne timestamp (par exemple, FROM_UNIXTIME (timestamp) = ...) rend l'indexation beaucoup plus difficile.
Si vous avez un timestamp mysql, quelque chose comme 2013-09-29 22:27:10
vous pouvez le faire
select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;
Convertissez-vous en unix, puis utilisez les fonctions de temps unix pour extraire le mois, dans ce cas 9 pour septembre.