回答
通常它会是这样:
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')
谢谢! (另外5个字符) – DRKM 2010-10-20 10:47:54
@merlinbeard这对于索引来说实际上是完全正常的,计算值是静态的,可以直接与'yourtimefield'值进行比较。现在,如果您有'WHERE FROM_UNIXTIME(yourtimefield)> ='2010-10-01''这将不允许建立索引,因为需要为每一行计算与日期格式比较的值。话虽如此。对于大多数使用情况,我仍然会建议使用日期,日期时间,时间戳记字段类型而不是unix时间戳记。 – 2016-01-07 19:08:20
@MikeBrant:正确的观察。这个表达式被计算一次并被折叠成一个常量,并且仍然可以与'yourtimefield'上的索引匹配。 merlinbeard的评论之后,我立即收到了一些预言,表明人们经常在没有完全理解他们投票的情况下投票。嘿,听起来像政治:) – 2016-01-08 16:05:54
SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'
对不起,我应该提到它是一个unix时间戳,而不是一个mysql时间戳(重要的信息位错过!) – DRKM 2010-10-20 10:30:53
我看到这篇文章,我的时间戳工作正常,我现在面临的问题,如果调用它与一个连接它总是带回返回零行 – 2014-10-06 09:13:03
那么会发生什么记录,具有时间戳2010-10-31 09: 00:00'? – 2016-01-11 01:33:40
紧凑,灵活的方法对时间戳没有小数秒将是:
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)
+1,用于避免为每次比较转换列。人们会希望这非常有效! – 2010-10-20 10:45:48
@Jimbo:不,“BETWEEN”在这里并不是一个好的选择,因为它在两端都是非包含的。 你必须写'2010-10-01 00:00:00'和'2010-10-31 23:59:59'之间的东西才能得到正确的答案,并且希望不要使用毫秒。 此外,9月31日不存在,因为9月只有30天。如果意思是“30”,那么它是不正确的,因为来自九月的数据将被返回。实际上,MySQL将这个解释为十月一日(非常整洁),这在这里是正确的。我不确定为什么你会在9月31日写它。 – 2016-01-08 16:01:47
@WoutervanNifterick不确定到底发生了什么,但已修复。我已经添加了一个关于fsp的评论,因为这是在他们有效之前写的 – Cez 2016-01-08 19:35:02
只要有可能,应避免在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');
在timestamp列中应用函数(例如,FROM_UNIXTIME(timestamp)= ...)会使索引变得更加困难。
此SQL查询将为您提取数据。它很容易和快速。
SELECT *
FROM table_name
WHERE extract(YEAR_MONTH from timestamp)="201010";
我可以看到有人对这个问题给出了很多评论。但我认为,简单使用LIKE
可能更容易从表中获取数据。
SELECT * FROM table WHERE COLUMN LIKE '2013-05-11%'
使用LIKE
和发布数据通配符搜索。希望这会解决你的问题。
编辑内容? – abhijitcaps 2016-12-07 02:14:02
如果你有一个MySQL时间戳,像2013-09-29 22:27:10
你可以做到这一点
select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;
转换为UNIX,然后使用UNIX时间函数来提取月份,在这种情况下,9九月份。
- 1. mysql日期时间范围选择
- 2. 选择日期和时间范围
- 3. php选择日期时间范围
- 4. MySql使用html日期输入选择带日期时间的日期范围
- 5. jQuery提示'时间范围'(日期范围选择器)
- 6. MySQL选择日期范围问题
- 7. 日期范围选择器 - 24小时范围选择
- 8. 由日期时间戳问题上的范围mysql分区
- 9. MySql选择时间戳记作为日期时间
- 10. 日期范围选择
- 11. 日期选择器日期范围
- 12. 与Google Analytics日期范围选择器类似的日期范围选择器?
- 13. 选择日期范围和列之间的日期
- 14. 日期范围之间进行选择,在这些日期
- 15. MySQL的时间戳选择
- 16. 如果时间戳范围在时间戳范围内
- 17. mysql时间戳或日期时间
- 18. MySQL选择时间戳作为日期字符串
- 19. 从日期时间索引中选择一定时间范围内的时间戳
- 20. 从时间戳时区之间进行选择(日期时间)
- 21. jQuery日期选择器,选择范围内的特定日期
- 22. SQlite:选择特定时间范围内的行,忽略日期
- 23. 在日期时间范围内选择记录
- 24. 以YII输入形式选择日期时间范围
- 25. 如何选择日期列表中的时间范围?
- 26. 角材料的日期/时间范围选择器
- 27. 从时间序列中选择日期范围
- 28. 排除日期/时间范围与重叠的日期/时间范围
- 29. 如何切片日期时间范围与另一个日期时间范围
- 30. 在一个日期时间列上应用日期范围的行选择
对不起,上面没有提到,它是一个unix时间戳,不是mysql时间戳。 – DRKM 2010-10-20 10:31:15
我看到这篇文章,我的时间戳工作正常,我现在面临的问题,如果调用它与一个连接它总是带回零行返回...我的查询是这样的SELECT * FROM db.t1,db.t2 WHERE t2 .t1_id = t1.id AND timestamp> ='2014-06-21'AND timestamp <='2014-07-20'; – 2014-10-10 08:00:46