直到今天,当我使用 MySQL 并需要使用日期/时间执行操作时,我使用的是带有 unix 时间戳的 int 列并且没有问题,但是今天在阅读了一些指南之后,我决定默认使用“current_timestamp”测试时间戳列。
所以我很感兴趣如何按信息为“2012-09-07 00:23:30”格式的列选择上个月的数据?也许有一些棘手的问题会从本月初(不是持续 30 天,而是从 09-01 00:00:00 到今天)给我什么数据?
这将为您提供最后一个月:
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
所有这一切都是从当前日期中提取月份中的某一天,然后从中减去那么多天。
你应该看看common_schema,它很容易安装并且有很多很棒的工具,包括一个start_of_month()
你正在寻找的函数:
select *
from your_table
where your_column >= common_schema.start_of_month(now())
如果你有一个mysql时间戳,2013-09-29 22:27:10
你可以这样做
select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;
转换为 unix,然后使用 unix 时间函数提取月份,在本例中为 9 表示 9 月。