检查存储在mysql db中的unix时间戳的月份名称(使用php)

时间:2010-08-27 10:24:35

标签: php mysql datetime

无法弄清楚如何执行以下操作 - 我想列出给定月份的所有事件,每个事件都将日期存储为数据库中的unix时间戳。在我的SQL查询中,我必须操纵时间戳,以便我可以检查日期是否与我正在比较的月份字符串在同一个月,例如“october”。最好的方法是什么?感谢

3 个答案:

答案 0 :(得分:6)

如果月份等于10月(第10个月),则选择表events中的所有列。

SELECT * FROM events WHERE MONTH(FROM_UNIXTIME(event_date)) = 10

可以在MySQL Manual

中找到更多与时间和日期相关的功能

答案 1 :(得分:2)

你可以使用类似的东西:

SELECT * FROM my_table
WHERE LEFT(MONTHNAME(my_date), 3) = LEFT(('AUGUST'), 3);

如果您提供完整的月份名称,则可能不需要LEFT功能:

SELECT * FROM my_table
WHERE MONTHNAME(my_date) = 'AUGUST';

如果您的列区分大小写,则可以对其进行修改,使其如下所示:

SELECT * FROM my_table
WHERE UPPER(LEFT(MONTHNAME(my_date), 3)) = LEFT(('AUGUST'), 3);

此外,您可能需要从Unix时间戳格式转换:

SELECT * FROM my_table
WHERE UPPER(LEFT(FROM_UNIXTIME(MONTHNAME(my_date)), 3)) = LEFT(('AUGUST'), 3);

答案 2 :(得分:1)

MySQL可以使用FROM_UNIXTIME()UNIX_TIMESTAMP()将unix时间戳转换为其自己的本机日期/日期时间类型,之后您可以应用标准日期/时间操作函数,例如{{1 }}。有关日期/时间操作函数的完整文档here

如果您在大型数据集上执行此类操作,则最好计算您感兴趣的特定月份的开始/结束时间戳。例如。如果你对2009年3月感兴趣,那么计算3月31日凌晨00:00,3月31日晚上11:59:59的unix时间戳。然后,您可以在时间戳字段上进行简单的数字比较,这将允许使用索引。