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