无法弄清楚如何执行以下操作 - 我想列出给定月份的所有事件,每个事件都将日期存储为数据库中的unix时间戳。在我的SQL查询中,我必须操纵时间戳,以便我可以检查日期是否与我正在比较的月份字符串在同一个月,例如“october”。最好的方法是什么?感谢
答案 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时间戳。然后,您可以在时间戳字段上进行简单的数字比较,这将允许使用索引。