不确定从哪一个开始。任何人都可以帮助/指出我正确的方向。
我在MySQL中有一个时间戳列,我想选择一个日期范围,例如,2010年10月的所有时间戳。
感谢。
答案 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日。