7

直到今天,当我使用 MySQL 并需要使用日期/时间执行操作时,我使用的是带有 unix 时间戳的 int 列并且没有问题,但是今天在阅读了一些指南之后,我决定默认使用“current_timestamp”测试时间戳列。

所以我很感兴趣如何按信息为“2012-09-07 00:23:30”格式的列选择上个月的数据?也许有一些棘手的问题会从本月初(不是持续 30 天,而是从 09-01 00:00:00 到今天)给我什么数据?

4

3 回答 3

17

这将为您提供最后一个月:

WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();

从月初开始:

WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();

BETWEEN 没什么特别的,它只是一个快捷方式

dateColumn <= ... AND dateColumn >= ....

嗯,我猜 NOW() 比较实际上并不需要,因为所有记录都在现在之前。

所以就这样做:

WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')

当月动态开始:

WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY

所有这一切都是从当前日期中提取月份中的某一天,然后从中减去那么多天。

于 2012-09-06T22:35:03.043 回答
3

你应该看看common_schema,它很容易安装并且有很多很棒的工具,包括一个start_of_month()你正在寻找的函数:

select * 
from your_table
where your_column >= common_schema.start_of_month(now())
于 2012-09-06T23:48:44.170 回答
-1

如果你有一个mysql时间戳,2013-09-29 22:27:10你可以这样做

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

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

于 2013-10-04T17:09:43.460 回答