MySQL时间戳选择日期范围

时间:2010-10-20 10:28:19

标签: mysql timestamp

不确定从哪一个开始。任何人都可以帮助/指出我正确的方向。

我在MySQL中有一个时间戳列,我想选择一个日期范围,例如,2010年10月的所有时间戳。

感谢。

7 个答案:

答案 0 :(得分:46)

通常会是这样的:

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

但是因为你有一个unix时间戳,你需要这样的东西:

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

答案 1 :(得分:38)

一种紧凑,灵活的时间戳方法,无需小数秒即可:

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

如果您使用小数秒和最新版本的MySQL,那么您最好采用>=<运算符的方法Wouter's answer

以下是使用小数秒精度(使用的最大精度)定义的时间字段的示例:

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)

答案 2 :(得分:5)

SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'

答案 3 :(得分:4)

我可以看到人们对这个问题发表了很多评论。但我认为,简单地使用LIKE可以更容易地从表中获取数据。

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

使用LIKE并发布数据野性字符搜索。希望这能解决您的问题。

答案 4 :(得分:3)

尽可能避免将函数应用于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)= ...)使索引更加困难。

答案 5 :(得分:3)

此SQL查询将为您提取数据。它简单快捷。

SELECT *
  FROM table_name
  WHERE extract( YEAR_MONTH from timestamp)="201010";

答案 6 :(得分:0)

如果您有一个mysql时间戳,可以使用2013-09-29 22:27:10这样的

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

转换为unix,然后使用unix时间函数提取月份,在本例中为9月9日。