Метка времени MySQL выберите диапазон дат - PullRequest
34 голосов
/ 20 октября 2010

Не уверен, на самом деле, с чего начать. Может ли кто-нибудь помочь / направить меня в правильном направлении.

У меня есть столбец меток времени в MySQL, и я хочу выбрать диапазон дат, например, все метки времени, которые находятся в октябре 2010 года.

Спасибо.

Ответы [ 7 ]

46 голосов
/ 20 октября 2010

Обычно это так:

SELECT * 
  FROM yourtable
 WHERE yourtimetimefield>='2010-10-01'
   AND yourtimetimefield< '2010-11-01'

Но поскольку у вас есть метки времени Unix, вам понадобится что-то вроде этого:

38 голосов
/ 20 октября 2010

Компактный, гибкий метод для отметок времени без дробных секунд будет выглядеть следующим образом:

SELECT * FROM table_name 
WHERE field_name 
BETWEEN UNIX_TIMESTAMP('2010-10-01') AND UNIX_TIMESTAMP('2010-10-31 23:59:59')

Если вы используете дробные секунды и последнюю версию MySQL, то вам лучше использовать подход >= и < операторов согласно ответу Ваутера .

Вот пример временных полей, определенных с долей секунды (максимальная точность в использовании):

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)
5 голосов
/ 20 октября 2010
SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'
4 голосов
/ 11 мая 2013

Я вижу людей, которые дают много комментариев по этому вопросу.Но я думаю, простое использование LIKE может быть проще для получения данных из таблицы.

SELECT * FROM table WHERE COLUMN LIKE '2013-05-11%'

Используйте LIKE и публикуйте данные для поиска по диким символам.Надеюсь, это решит вашу проблему.

3 голосов
/ 11 апреля 2012

Этот запрос SQL извлечет данные для вас.Это просто и быстро.

SELECT *
  FROM table_name
  WHERE extract( YEAR_MONTH from timestamp)="201010";
3 голосов
/ 20 октября 2010

По возможности избегайте применения функций к столбцу в предложении 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');

Применение функции к столбцу метки времени (например, FROM_UNIXTIME (timestamp) = ...) значительно затрудняет индексирование.

0 голосов
/ 04 октября 2013

Если у вас есть отметка времени mysql, например, 2013-09-29 22:27:10, вы можете сделать это

 select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;

Преобразовать в unix, а затем использовать функции времени unix для извлечения месяца, в данном случае 9 для сентября.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...