【问题标题】:MySQL Select last month data by current_timestampMySQL 通过 current_timestamp 选择上个月的数据
【发布时间】:2012-09-06 22:22:52
【问题描述】:

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

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

【问题讨论】:

  • 不久前我遇到了类似的问题,最终通过服务器端语言计算日期(在这种情况下是 php,但任何都允许你这样做)。无论如何,对此也感兴趣:)
  • @jribeiro 发了答案,看看吧。

标签: mysql timestamp


【解决方案1】:

这会给你最后一个月:

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

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

【讨论】:

  • 我看到的问题是查询是否需要是动态的。我这样做了,但我仍然必须在服务器端找到月初。但这也许超出了 OP 的要求。 :)
【解决方案2】:

你应该看看common_schema,它很容易安装并且有很多很棒的工具,包括一个叫做start_of_month()的函数,这正是你想要的:

select * 
from your_table
where your_column >= common_schema.start_of_month(now())

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 更好select * from table where MONTH(time) = (MONTH(NOW()));
    • 明年这个月怎么样?
    • 也许从表中选择 * MONTH(time) = (MONTH(NOW())) and YEAR(time) = YEAR(NOW()));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2015-10-19
    相关资源
    最近更新 更多